@f12io/maple-language-core 0.0.2

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.
Files changed (53) hide show
  1. package/README.md +42 -0
  2. package/dist/LanguageService.d.ts +104 -0
  3. package/dist/LanguageService.js +16 -0
  4. package/dist/LanguageService.js.map +1 -0
  5. package/dist/extractor.helper.d.ts +66 -0
  6. package/dist/extractor.helper.js +319 -0
  7. package/dist/extractor.helper.js.map +1 -0
  8. package/dist/formatter.d.ts +26 -0
  9. package/dist/formatter.js +206 -0
  10. package/dist/formatter.js.map +1 -0
  11. package/dist/index.d.ts +15 -0
  12. package/dist/index.js +50 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/language-definitions.d.ts +9 -0
  15. package/dist/language-definitions.js +35 -0
  16. package/dist/language-definitions.js.map +1 -0
  17. package/dist/languages/AngularLanguageService.d.ts +6 -0
  18. package/dist/languages/AngularLanguageService.js +66 -0
  19. package/dist/languages/AngularLanguageService.js.map +1 -0
  20. package/dist/languages/BaseLanguageService.d.ts +80 -0
  21. package/dist/languages/BaseLanguageService.js +409 -0
  22. package/dist/languages/BaseLanguageService.js.map +1 -0
  23. package/dist/languages/HtmlLanguageService.d.ts +5 -0
  24. package/dist/languages/HtmlLanguageService.js +29 -0
  25. package/dist/languages/HtmlLanguageService.js.map +1 -0
  26. package/dist/languages/JavascriptLanguageService.d.ts +10 -0
  27. package/dist/languages/JavascriptLanguageService.js +95 -0
  28. package/dist/languages/JavascriptLanguageService.js.map +1 -0
  29. package/dist/languages/PhpLanguageService.d.ts +22 -0
  30. package/dist/languages/PhpLanguageService.js +242 -0
  31. package/dist/languages/PhpLanguageService.js.map +1 -0
  32. package/dist/languages/RazorLanguageService.d.ts +33 -0
  33. package/dist/languages/RazorLanguageService.js +338 -0
  34. package/dist/languages/RazorLanguageService.js.map +1 -0
  35. package/dist/languages/ReactLanguageService.d.ts +6 -0
  36. package/dist/languages/ReactLanguageService.js +31 -0
  37. package/dist/languages/ReactLanguageService.js.map +1 -0
  38. package/dist/languages/SvelteLanguageService.d.ts +9 -0
  39. package/dist/languages/SvelteLanguageService.js +65 -0
  40. package/dist/languages/SvelteLanguageService.js.map +1 -0
  41. package/dist/languages/TwigLanguageService.d.ts +4 -0
  42. package/dist/languages/TwigLanguageService.js +12 -0
  43. package/dist/languages/TwigLanguageService.js.map +1 -0
  44. package/dist/languages/VueLanguageService.d.ts +6 -0
  45. package/dist/languages/VueLanguageService.js +36 -0
  46. package/dist/languages/VueLanguageService.js.map +1 -0
  47. package/dist/regex.d.ts +63 -0
  48. package/dist/regex.js +92 -0
  49. package/dist/regex.js.map +1 -0
  50. package/dist/registry.d.ts +7 -0
  51. package/dist/registry.js +86 -0
  52. package/dist/registry.js.map +1 -0
  53. package/package.json +38 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactLanguageService = void 0;
4
+ const regex_1 = require("../regex");
5
+ const JavascriptLanguageService_1 = require("./JavascriptLanguageService");
6
+ class ReactLanguageService extends JavascriptLanguageService_1.JavascriptLanguageService {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.languageIds = ['javascriptreact', 'typescriptreact'];
10
+ }
11
+ collectRegions(text) {
12
+ const regions = super.collectRegions(text);
13
+ // React / Solid JSX expressions: className={...}, class={...}, classList={...}
14
+ for (const match of text.matchAll(regex_1.JSX_EXPR_START_REGEX)) {
15
+ const openBrace = match.index + match[0].length - 1;
16
+ const end = this.parseBalancedExpression(text, openBrace);
17
+ if (end === -1)
18
+ continue;
19
+ regions.push({
20
+ start: openBrace + 1,
21
+ end: end - 1,
22
+ kind: 'expression',
23
+ anchor: match.index,
24
+ includeObjectKeys: true,
25
+ });
26
+ }
27
+ return regions;
28
+ }
29
+ }
30
+ exports.ReactLanguageService = ReactLanguageService;
31
+ //# sourceMappingURL=ReactLanguageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactLanguageService.js","sourceRoot":"","sources":["../../src/languages/ReactLanguageService.ts"],"names":[],"mappings":";;;AACA,oCAAgD;AAChD,2EAAwE;AAExE,MAAa,oBAAqB,SAAQ,qDAAyB;IAAnE;;QACE,gBAAW,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IAmBvD,CAAC;IAjBQ,cAAc,CAAC,IAAY;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,+EAA+E;QAC/E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,4BAAoB,CAAC,EAAE,CAAC;YACxD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,SAAS;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,SAAS,GAAG,CAAC;gBACpB,GAAG,EAAE,GAAG,GAAG,CAAC;gBACZ,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,KAAK,CAAC,KAAK;gBACnB,iBAAiB,EAAE,IAAI;aACxB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AApBD,oDAoBC"}
@@ -0,0 +1,9 @@
1
+ import { MapleRegion } from '../LanguageService';
2
+ import { InterpolationContext, InterpolationMatch } from './BaseLanguageService';
3
+ import { HtmlLanguageService } from './HtmlLanguageService';
4
+ export declare class SvelteLanguageService extends HtmlLanguageService {
5
+ languageIds: string[];
6
+ collectRegions(text: string): Array<MapleRegion>;
7
+ protected parseInterpolation(value: string, index: number, context?: InterpolationContext): InterpolationMatch | undefined;
8
+ protected skipStringAt(expr: string, index: number): number;
9
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SvelteLanguageService = void 0;
4
+ const regex_1 = require("../regex");
5
+ const HtmlLanguageService_1 = require("./HtmlLanguageService");
6
+ class SvelteLanguageService extends HtmlLanguageService_1.HtmlLanguageService {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.languageIds = ['svelte'];
10
+ }
11
+ collectRegions(text) {
12
+ const regions = super.collectRegions(text);
13
+ // Svelte class directives: class:name="..."
14
+ for (const match of text.matchAll(regex_1.SPECIFIC_CLASS_REGEX)) {
15
+ const start = match.index + match[0].indexOf(match[1]);
16
+ regions.push({
17
+ start,
18
+ end: start + match[1].length,
19
+ kind: 'class-text',
20
+ anchor: match.index,
21
+ allowMultilineLiterals: false,
22
+ });
23
+ }
24
+ // Svelte class expressions class={...} and clsx/classNames/cva calls
25
+ for (const regex of [regex_1.JSX_EXPR_START_REGEX, regex_1.UTILITY_FUNC_START_REGEX]) {
26
+ for (const match of text.matchAll(regex)) {
27
+ const openIndex = match.index + match[0].length - 1;
28
+ const end = this.parseBalancedExpression(text, openIndex);
29
+ if (end === -1)
30
+ continue;
31
+ regions.push({
32
+ start: openIndex + 1,
33
+ end: end - 1,
34
+ kind: 'expression',
35
+ anchor: match.index,
36
+ includeObjectKeys: true,
37
+ });
38
+ }
39
+ }
40
+ return regions;
41
+ }
42
+ parseInterpolation(value, index, context) {
43
+ // Svelte interpolations inside class attribute: {isActive ? '...' : '...'}
44
+ if (value[index] === '{') {
45
+ const end = this.parseBalanced(value, index);
46
+ if (end !== -1) {
47
+ return {
48
+ innerExprStart: index + 1,
49
+ innerExprEnd: end - 1,
50
+ endIndex: end,
51
+ };
52
+ }
53
+ }
54
+ return super.parseInterpolation(value, index, context);
55
+ }
56
+ skipStringAt(expr, index) {
57
+ // Svelte expressions may contain JS template literals
58
+ if (expr[index] === '`') {
59
+ return this.skipTemplateLiteral(expr, index);
60
+ }
61
+ return super.skipStringAt(expr, index);
62
+ }
63
+ }
64
+ exports.SvelteLanguageService = SvelteLanguageService;
65
+ //# sourceMappingURL=SvelteLanguageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SvelteLanguageService.js","sourceRoot":"","sources":["../../src/languages/SvelteLanguageService.ts"],"names":[],"mappings":";;;AACA,oCAIkB;AAKlB,+DAA4D;AAE5D,MAAa,qBAAsB,SAAQ,yCAAmB;IAA9D;;QACE,gBAAW,GAAG,CAAC,QAAQ,CAAC,CAAC;IA6D3B,CAAC;IA3DQ,cAAc,CAAC,IAAY;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE3C,4CAA4C;QAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,4BAAoB,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC5B,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,KAAK,CAAC,KAAK;gBACnB,sBAAsB,EAAE,KAAK;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,qEAAqE;QACrE,KAAK,MAAM,KAAK,IAAI,CAAC,4BAAoB,EAAE,gCAAwB,CAAC,EAAE,CAAC;YACrE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC1D,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,SAAS;gBACzB,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,SAAS,GAAG,CAAC;oBACpB,GAAG,EAAE,GAAG,GAAG,CAAC;oBACZ,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,KAAK,CAAC,KAAK;oBACnB,iBAAiB,EAAE,IAAI;iBACxB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,kBAAkB,CAC1B,KAAa,EACb,KAAa,EACb,OAA8B;QAE9B,2EAA2E;QAC3E,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,OAAO;oBACL,cAAc,EAAE,KAAK,GAAG,CAAC;oBACzB,YAAY,EAAE,GAAG,GAAG,CAAC;oBACrB,QAAQ,EAAE,GAAG;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAES,YAAY,CAAC,IAAY,EAAE,KAAa;QAChD,sDAAsD;QACtD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;CACF;AA9DD,sDA8DC"}
@@ -0,0 +1,4 @@
1
+ import { HtmlLanguageService } from './HtmlLanguageService';
2
+ export declare class TwigLanguageService extends HtmlLanguageService {
3
+ languageIds: string[];
4
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TwigLanguageService = void 0;
4
+ const HtmlLanguageService_1 = require("./HtmlLanguageService");
5
+ class TwigLanguageService extends HtmlLanguageService_1.HtmlLanguageService {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.languageIds = ['twig'];
9
+ }
10
+ }
11
+ exports.TwigLanguageService = TwigLanguageService;
12
+ //# sourceMappingURL=TwigLanguageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwigLanguageService.js","sourceRoot":"","sources":["../../src/languages/TwigLanguageService.ts"],"names":[],"mappings":";;;AAAA,+DAA4D;AAE5D,MAAa,mBAAoB,SAAQ,yCAAmB;IAA5D;;QACE,gBAAW,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;CAAA;AAFD,kDAEC"}
@@ -0,0 +1,6 @@
1
+ import { MapleRegion } from '../LanguageService';
2
+ import { HtmlLanguageService } from './HtmlLanguageService';
3
+ export declare class VueLanguageService extends HtmlLanguageService {
4
+ languageIds: string[];
5
+ collectRegions(text: string): Array<MapleRegion>;
6
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VueLanguageService = void 0;
4
+ const extractor_helper_1 = require("../extractor.helper");
5
+ const regex_1 = require("../regex");
6
+ const HtmlLanguageService_1 = require("./HtmlLanguageService");
7
+ class VueLanguageService extends HtmlLanguageService_1.HtmlLanguageService {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.languageIds = ['vue'];
11
+ }
12
+ collectRegions(text) {
13
+ const regions = super.collectRegions(text);
14
+ // Vue expressions: :class="..."
15
+ for (const match of text.matchAll(regex_1.ANGULAR_VUE_EXPR_REGEX)) {
16
+ const quote = match[1];
17
+ const exprStart = match.index + match[0].length;
18
+ const closingQuoteIndex = (0, extractor_helper_1.findClosingQuote)(text, exprStart, quote);
19
+ if (closingQuoteIndex === -1)
20
+ continue;
21
+ regions.push({
22
+ start: exprStart,
23
+ end: closingQuoteIndex,
24
+ kind: 'expression',
25
+ anchor: match.index,
26
+ includeObjectKeys: true,
27
+ // The expression lives inside an HTML attribute; its JS strings
28
+ // cannot span lines
29
+ allowMultilineLiterals: false,
30
+ });
31
+ }
32
+ return regions;
33
+ }
34
+ }
35
+ exports.VueLanguageService = VueLanguageService;
36
+ //# sourceMappingURL=VueLanguageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VueLanguageService.js","sourceRoot":"","sources":["../../src/languages/VueLanguageService.ts"],"names":[],"mappings":";;;AAAA,0DAAuD;AAEvD,oCAAkD;AAClD,+DAA4D;AAE5D,MAAa,kBAAmB,SAAQ,yCAAmB;IAA3D;;QACE,gBAAW,GAAG,CAAC,KAAK,CAAC,CAAC;IAwBxB,CAAC;IAtBQ,cAAc,CAAC,IAAY;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,gCAAgC;QAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,8BAAsB,CAAC,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAChD,MAAM,iBAAiB,GAAG,IAAA,mCAAgB,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACnE,IAAI,iBAAiB,KAAK,CAAC,CAAC;gBAAE,SAAS;YAEvC,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,iBAAiB;gBACtB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,KAAK,CAAC,KAAK;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,gEAAgE;gBAChE,oBAAoB;gBACpB,sBAAsB,EAAE,KAAK;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAzBD,gDAyBC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Centralized Regular Expressions
3
+ */
4
+ export declare const MAPLE_CLASS_PATTERN = "[\\w\\-@:\\[\\]\\#\\.\\%\\|_\\/\\(\\)\\,\\=\\!\\^\\&\\>\\<\\~\\+\\*\\'\\\"\\{\\}]+";
5
+ /** Global matcher for all maple class tokens. */
6
+ export declare const MAPLE_CLASS_REGEX: RegExp;
7
+ /** Non-global matcher for a single maple class token. */
8
+ export declare const MAPLE_CLASS_REGEX_NON_GLOBAL: RegExp;
9
+ /** Non-global matcher for a maple interpolation token (e.g. {space,4}). */
10
+ export declare const MAPLE_INTERPOLATION_REGEX: RegExp;
11
+ /** Splits a utility string to extract brace `{...}` and paren `(...)` blocks while keeping them in the resulting array. */
12
+ export declare const MAPLE_PARAMS_SPLIT_REGEX: RegExp;
13
+ /** Splits parameter lists inside parens `(...)` by colon or comma, retaining delimiters. */
14
+ export declare const MAPLE_PARAM_KEY_VALUE_SPLIT_REGEX: RegExp;
15
+ /** Splits parameter lists inside braces `{...}` by comma, retaining delimiters. */
16
+ export declare const MAPLE_COMMA_SPLIT_REGEX: RegExp;
17
+ /** Splits class names by underscore, retaining delimiters. */
18
+ export declare const MAPLE_UNDERSCORE_SPLIT_REGEX: RegExp;
19
+ /** Matches an alias parameter placeholder for substitution: {key} or {key,fallback} */
20
+ export declare const getParamSubstituteRegex: (key: string) => RegExp;
21
+ /** Matches an alias parameter placeholder that has a fallback: {key,fallback} */
22
+ export declare const PARAM_FALLBACK_REGEX: RegExp;
23
+ /** Matches any alias parameter placeholder to remove missing parameters: {key} */
24
+ export declare const PARAM_REMOVE_REGEX: RegExp;
25
+ export declare const ALIAS_PREFIX = "--alias-";
26
+ /** Matches: --alias-name=value */
27
+ export declare const ALIAS_REGEX: RegExp;
28
+ export declare const DISABLE_REGEX: RegExp;
29
+ export declare const ENABLE_REGEX: RegExp;
30
+ /** Matches the contents of the <head> tag */
31
+ export declare const HEAD_TAG_REGEX: RegExp;
32
+ /** Matches a script tag importing maple.js or maple.min.js */
33
+ export declare const MAPLE_SCRIPT_REGEX: RegExp;
34
+ /** Matches a word characters sequence preceded by whitespace at start of string */
35
+ export declare const START_TAG_NAME_REGEX: RegExp;
36
+ /** Matches an asterisk after optional whitespace at the start of string */
37
+ export declare const START_COMMENT_STAR_REGEX: RegExp;
38
+ /** Splits a string by quotes and whitespace for word tokenization */
39
+ export declare const TOKEN_SPLIT_REGEX: RegExp;
40
+ /** Matches the start of a string literal tagged with maple and captures its quote */
41
+ /** Matches object keys inside an expression that aren't quoted. e.g. { active: true } -> 'active' */
42
+ export declare const OBJECT_KEY_REGEX: RegExp;
43
+ /** Matches string literals in single quotes, double quotes, or backticks */
44
+ export declare const STRING_LITERAL_REGEX: RegExp;
45
+ /** Matches whitespace at the start of a string for indentation */
46
+ export declare const INDENT_WHITESPACE_REGEX: RegExp;
47
+ /** 1. Standard attributes: class="", className="", CssClass="" */
48
+ export declare const STANDARD_ATTR_REGEX: RegExp;
49
+ /** 2. Angular / Vue expressions: [ngClass]="...", :class="...", [class]="..." */
50
+ export declare const ANGULAR_VUE_EXPR_REGEX: RegExp;
51
+ /** 3. Angular Host Bindings: host: { 'class': '...', '[class.xxx]': 'true' } */
52
+ export declare const HOST_REGEX: RegExp;
53
+ export declare const HOST_CLASS_REGEX: RegExp;
54
+ /** 4. Angular [class.xxx]="..." and Svelte class:xxx="..." */
55
+ export declare const SPECIFIC_CLASS_REGEX: RegExp;
56
+ /** 5. React / Solid JSX expressions starting with an open brace */
57
+ export declare const JSX_EXPR_START_REGEX: RegExp;
58
+ /** 6. Utility functions: clsx(...), classNames(...), cva(...) */
59
+ export declare const UTILITY_FUNC_START_REGEX: RegExp;
60
+ /** 7. Explicit opt-in comment marking the following expression as maple */
61
+ export declare const OPT_IN_COMMENT_REGEX: RegExp;
62
+ /** 8. Explicit opt-in comments for objects */
63
+ export declare const OPT_IN_OBJECT_START_REGEX: RegExp;
package/dist/regex.js ADDED
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized Regular Expressions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OPT_IN_OBJECT_START_REGEX = exports.OPT_IN_COMMENT_REGEX = exports.UTILITY_FUNC_START_REGEX = exports.JSX_EXPR_START_REGEX = exports.SPECIFIC_CLASS_REGEX = exports.HOST_CLASS_REGEX = exports.HOST_REGEX = exports.ANGULAR_VUE_EXPR_REGEX = exports.STANDARD_ATTR_REGEX = exports.INDENT_WHITESPACE_REGEX = exports.STRING_LITERAL_REGEX = exports.OBJECT_KEY_REGEX = exports.TOKEN_SPLIT_REGEX = exports.START_COMMENT_STAR_REGEX = exports.START_TAG_NAME_REGEX = exports.MAPLE_SCRIPT_REGEX = exports.HEAD_TAG_REGEX = exports.ENABLE_REGEX = exports.DISABLE_REGEX = exports.ALIAS_REGEX = exports.ALIAS_PREFIX = exports.PARAM_REMOVE_REGEX = exports.PARAM_FALLBACK_REGEX = exports.getParamSubstituteRegex = exports.MAPLE_UNDERSCORE_SPLIT_REGEX = exports.MAPLE_COMMA_SPLIT_REGEX = exports.MAPLE_PARAM_KEY_VALUE_SPLIT_REGEX = exports.MAPLE_PARAMS_SPLIT_REGEX = exports.MAPLE_INTERPOLATION_REGEX = exports.MAPLE_CLASS_REGEX_NON_GLOBAL = exports.MAPLE_CLASS_REGEX = exports.MAPLE_CLASS_PATTERN = void 0;
7
+ // ============================================================================
8
+ // Maple Token Parsing
9
+ // ============================================================================
10
+ exports.MAPLE_CLASS_PATTERN = `[\\w\\-@:\\[\\]\\#\\.\\%\\|_\\/\\(\\)\\,\\=\\!\\^\\&\\>\\<\\~\\+\\*\\'\\"\\{\\}]+`;
11
+ /** Global matcher for all maple class tokens. */
12
+ exports.MAPLE_CLASS_REGEX = new RegExp(exports.MAPLE_CLASS_PATTERN, 'g');
13
+ /** Non-global matcher for a single maple class token. */
14
+ exports.MAPLE_CLASS_REGEX_NON_GLOBAL = new RegExp(exports.MAPLE_CLASS_PATTERN);
15
+ /** Non-global matcher for a maple interpolation token (e.g. {space,4}). */
16
+ exports.MAPLE_INTERPOLATION_REGEX = /^\{[\w\-.,]+\}/;
17
+ /** Splits a utility string to extract brace `{...}` and paren `(...)` blocks while keeping them in the resulting array. */
18
+ exports.MAPLE_PARAMS_SPLIT_REGEX = /(\{[^}]*\}|\([^)]*\))/;
19
+ /** Splits parameter lists inside parens `(...)` by colon or comma, retaining delimiters. */
20
+ exports.MAPLE_PARAM_KEY_VALUE_SPLIT_REGEX = /([:,])/;
21
+ /** Splits parameter lists inside braces `{...}` by comma, retaining delimiters. */
22
+ exports.MAPLE_COMMA_SPLIT_REGEX = /(,)/;
23
+ /** Splits class names by underscore, retaining delimiters. */
24
+ exports.MAPLE_UNDERSCORE_SPLIT_REGEX = /(_)/;
25
+ /** Matches an alias parameter placeholder for substitution: {key} or {key,fallback} */
26
+ const getParamSubstituteRegex = (key) => new RegExp(`\\{${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?:,[^}]+)?\\}`, 'g');
27
+ exports.getParamSubstituteRegex = getParamSubstituteRegex;
28
+ /** Matches an alias parameter placeholder that has a fallback: {key,fallback} */
29
+ exports.PARAM_FALLBACK_REGEX = /\{[^{}]*,([^}]*)\}/g;
30
+ /** Matches any alias parameter placeholder to remove missing parameters: {key} */
31
+ exports.PARAM_REMOVE_REGEX = /\{[^}]*\}/g;
32
+ // ============================================================================
33
+ // Alias Extraction
34
+ // ============================================================================
35
+ exports.ALIAS_PREFIX = `--alias-`;
36
+ /** Matches: --alias-name=value */
37
+ exports.ALIAS_REGEX = new RegExp(`${exports.ALIAS_PREFIX}([a-zA-Z0-9\\-]+)=([^"'\\s]+)`, 'g');
38
+ // ============================================================================
39
+ // Disable / Enable Comments
40
+ // ============================================================================
41
+ exports.DISABLE_REGEX = /\/\*\s*maple-disable\s*\*\//g;
42
+ exports.ENABLE_REGEX = /\/\*\s*maple-enable\s*\*\//g;
43
+ // ============================================================================
44
+ // HTML Parsing
45
+ // ============================================================================
46
+ /** Matches the contents of the <head> tag */
47
+ exports.HEAD_TAG_REGEX = /<head[^>]*>([\s\S]*?)<\/head>/i;
48
+ /** Matches a script tag importing maple.js or maple.min.js */
49
+ exports.MAPLE_SCRIPT_REGEX = /<script[^>]+src=["'][^"']*maple(\.min)?\.js(["'?])/i;
50
+ // ============================================================================
51
+ // General Parsing Utilities
52
+ // ============================================================================
53
+ /** Matches a word characters sequence preceded by whitespace at start of string */
54
+ exports.START_TAG_NAME_REGEX = /^\s*([a-zA-Z0-9\-]+)/;
55
+ /** Matches an asterisk after optional whitespace at the start of string */
56
+ exports.START_COMMENT_STAR_REGEX = /^\s*\*/;
57
+ /** Splits a string by quotes and whitespace for word tokenization */
58
+ exports.TOKEN_SPLIT_REGEX = /(["'`\s])/;
59
+ // ============================================================================
60
+ // Formatter Regexes
61
+ // ============================================================================
62
+ /** Matches the start of a string literal tagged with maple and captures its quote */
63
+ /** Matches object keys inside an expression that aren't quoted. e.g. { active: true } -> 'active' */
64
+ exports.OBJECT_KEY_REGEX = /(?:[{,])\s*([a-zA-Z0-9\-_]+)\s*:/g;
65
+ /** Matches string literals in single quotes, double quotes, or backticks */
66
+ exports.STRING_LITERAL_REGEX = /(["'`])([\s\S]*?)\1/g;
67
+ /** Matches whitespace at the start of a string for indentation */
68
+ exports.INDENT_WHITESPACE_REGEX = /^\s*/;
69
+ // ============================================================================
70
+ // Attribute & Expression Matchers (Class Extraction)
71
+ // ============================================================================
72
+ const STANDARD_CLASS_ATTRS = `class|className|CssClass`;
73
+ const ANGULAR_VUE_CLASS_ATTRS = `\\[ngClass\\]|:class|\\[class\\]`;
74
+ const JS_FRAMEWORK_CLASS_ATTRS = `class|className|classList`;
75
+ /** 1. Standard attributes: class="", className="", CssClass="" */
76
+ exports.STANDARD_ATTR_REGEX = new RegExp(`(?:^|[\\s<>])(?:${STANDARD_CLASS_ATTRS})\\s*=\\s*(["'])`, 'gi');
77
+ /** 2. Angular / Vue expressions: [ngClass]="...", :class="...", [class]="..." */
78
+ exports.ANGULAR_VUE_EXPR_REGEX = new RegExp(`(?:${ANGULAR_VUE_CLASS_ATTRS})\\s*=\\s*(["'])`, 'gi');
79
+ /** 3. Angular Host Bindings: host: { 'class': '...', '[class.xxx]': 'true' } */
80
+ exports.HOST_REGEX = /host\s*:\s*\{([^}]+)\}/g;
81
+ exports.HOST_CLASS_REGEX = /(?:'class'|"class"|class)\s*:\s*(["'`])([\s\S]*?)\1/g;
82
+ /** 4. Angular [class.xxx]="..." and Svelte class:xxx="..." */
83
+ exports.SPECIFIC_CLASS_REGEX = /(?:\[class\.|class:)([a-zA-Z0-9\-\@\:]+)(?:\]|\=|\s)/g;
84
+ /** 5. React / Solid JSX expressions starting with an open brace */
85
+ exports.JSX_EXPR_START_REGEX = new RegExp(`(?:^|[\\s<>])(?:${JS_FRAMEWORK_CLASS_ATTRS})\\s*=\\s*\\{`, 'gi');
86
+ /** 6. Utility functions: clsx(...), classNames(...), cva(...) */
87
+ exports.UTILITY_FUNC_START_REGEX = /(?:clsx|classNames|cva)\s*\(/gi;
88
+ /** 7. Explicit opt-in comment marking the following expression as maple */
89
+ exports.OPT_IN_COMMENT_REGEX = /\/\*\s*maple\s*\*\//g;
90
+ /** 8. Explicit opt-in comments for objects */
91
+ exports.OPT_IN_OBJECT_START_REGEX = /\/\*\s*maple\s*\*\/\s*\{/gi;
92
+ //# sourceMappingURL=regex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex.js","sourceRoot":"","sources":["../src/regex.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAClE,QAAA,mBAAmB,GAAG,mFAAmF,CAAC;AAEvH,iDAAiD;AACpC,QAAA,iBAAiB,GAAG,IAAI,MAAM,CAAC,2BAAmB,EAAE,GAAG,CAAC,CAAC;AAEtE,yDAAyD;AAC5C,QAAA,4BAA4B,GAAG,IAAI,MAAM,CAAC,2BAAmB,CAAC,CAAC;AAE5E,2EAA2E;AAC9D,QAAA,yBAAyB,GAAG,gBAAgB,CAAC;AAE1D,2HAA2H;AAC9G,QAAA,wBAAwB,GAAG,uBAAuB,CAAC;AAEhE,4FAA4F;AAC/E,QAAA,iCAAiC,GAAG,QAAQ,CAAC;AAE1D,mFAAmF;AACtE,QAAA,uBAAuB,GAAG,KAAK,CAAC;AAE7C,8DAA8D;AACjD,QAAA,4BAA4B,GAAG,KAAK,CAAC;AAElD,uFAAuF;AAChF,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,EAAE,CACrD,IAAI,MAAM,CACR,MAAM,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,EAChE,GAAG,CACJ,CAAC;AAJS,QAAA,uBAAuB,2BAIhC;AAEJ,iFAAiF;AACpE,QAAA,oBAAoB,GAAG,qBAAqB,CAAC;AAE1D,kFAAkF;AACrE,QAAA,kBAAkB,GAAG,YAAY,CAAC;AAE/C,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAClE,QAAA,YAAY,GAAG,UAAU,CAAC;AACvC,kCAAkC;AACrB,QAAA,WAAW,GAAG,IAAI,MAAM,CACnC,GAAG,oBAAY,+BAA+B,EAC9C,GAAG,CACJ,CAAC;AAEF,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAClE,QAAA,aAAa,GAAG,8BAA8B,CAAC;AAC/C,QAAA,YAAY,GAAG,6BAA6B,CAAC;AAE1D,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAC/E,6CAA6C;AAChC,QAAA,cAAc,GAAG,gCAAgC,CAAC;AAE/D,8DAA8D;AACjD,QAAA,kBAAkB,GAC7B,qDAAqD,CAAC;AAExD,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,mFAAmF;AACtE,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,2EAA2E;AAC9D,QAAA,wBAAwB,GAAG,QAAQ,CAAC;AAEjD,qEAAqE;AACxD,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAE7C,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAI/E,qFAAqF;AAErF,qGAAqG;AACxF,QAAA,gBAAgB,GAAG,mCAAmC,CAAC;AAEpE,4EAA4E;AAC/D,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,kEAAkE;AACrD,QAAA,uBAAuB,GAAG,MAAM,CAAC;AAE9C,+EAA+E;AAC/E,qDAAqD;AACrD,+EAA+E;AAE/E,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AACxD,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AACnE,MAAM,wBAAwB,GAAG,2BAA2B,CAAC;AAE7D,kEAAkE;AACrD,QAAA,mBAAmB,GAAG,IAAI,MAAM,CAC3C,mBAAmB,oBAAoB,kBAAkB,EACzD,IAAI,CACL,CAAC;AAEF,iFAAiF;AACpE,QAAA,sBAAsB,GAAG,IAAI,MAAM,CAC9C,MAAM,uBAAuB,kBAAkB,EAC/C,IAAI,CACL,CAAC;AAEF,gFAAgF;AACnE,QAAA,UAAU,GAAG,yBAAyB,CAAC;AACvC,QAAA,gBAAgB,GAC3B,sDAAsD,CAAC;AAEzD,8DAA8D;AACjD,QAAA,oBAAoB,GAC/B,uDAAuD,CAAC;AAE1D,mEAAmE;AACtD,QAAA,oBAAoB,GAAG,IAAI,MAAM,CAC5C,mBAAmB,wBAAwB,eAAe,EAC1D,IAAI,CACL,CAAC;AAEF,iEAAiE;AACpD,QAAA,wBAAwB,GAAG,gCAAgC,CAAC;AAEzE,2EAA2E;AAC9D,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,8CAA8C;AACjC,QAAA,yBAAyB,GAAG,4BAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ILanguageService } from './LanguageService';
2
+ export declare class LanguageServiceRegistry {
3
+ private static services;
4
+ private static register;
5
+ static getService(languageId: string): ILanguageService | undefined;
6
+ static isSupported(languageId: string): boolean;
7
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LanguageServiceRegistry = void 0;
5
+ const LanguageService_1 = require("./LanguageService");
6
+ const AngularLanguageService_1 = require("./languages/AngularLanguageService");
7
+ const HtmlLanguageService_1 = require("./languages/HtmlLanguageService");
8
+ const JavascriptLanguageService_1 = require("./languages/JavascriptLanguageService");
9
+ const PhpLanguageService_1 = require("./languages/PhpLanguageService");
10
+ const RazorLanguageService_1 = require("./languages/RazorLanguageService");
11
+ const ReactLanguageService_1 = require("./languages/ReactLanguageService");
12
+ const SvelteLanguageService_1 = require("./languages/SvelteLanguageService");
13
+ const TwigLanguageService_1 = require("./languages/TwigLanguageService");
14
+ const VueLanguageService_1 = require("./languages/VueLanguageService");
15
+ class CompositeLanguageService {
16
+ constructor(languageId, services) {
17
+ this.services = services;
18
+ this.languageIds = [languageId];
19
+ }
20
+ extractClasses(text) {
21
+ const instances = [];
22
+ for (const service of this.services) {
23
+ instances.push(...service.extractClasses(text));
24
+ }
25
+ // Canonical document order, independent of service order
26
+ return (0, LanguageService_1.dedupeInstancesByStart)(instances).sort((a, b) => a.start - b.start);
27
+ }
28
+ collectRegions(text) {
29
+ // Regions come from every service handling this language, like extraction
30
+ return this.services.flatMap((service) => service.collectRegions(text));
31
+ }
32
+ getRenderedClassText(word) {
33
+ return this.services[this.services.length - 1].getRenderedClassText(word);
34
+ }
35
+ getMultilineStringDelimiters(rawQuote, content) {
36
+ return this.services[this.services.length - 1].getMultilineStringDelimiters(rawQuote, content);
37
+ }
38
+ matchStringLiteral(text, index) {
39
+ return this.services[this.services.length - 1].matchStringLiteral(text, index);
40
+ }
41
+ formatExpression(expr, baseIndent, maxClassesPerLine, formatClassesFn) {
42
+ return this.services[this.services.length - 1].formatExpression(expr, baseIndent, maxClassesPerLine, formatClassesFn);
43
+ }
44
+ tokenizeClassesWithIndices(str) {
45
+ // The last service is usually the most specific one
46
+ // (e.g. PhpLanguageService over HtmlLanguageService)
47
+ return this.services[this.services.length - 1].tokenizeClassesWithIndices(str);
48
+ }
49
+ formatInterpolation(cls, baseIndent, maxClassesPerLine, formatClassesFn) {
50
+ return this.services[this.services.length - 1].formatInterpolation(cls, baseIndent, maxClassesPerLine, formatClassesFn);
51
+ }
52
+ }
53
+ class LanguageServiceRegistry {
54
+ static register(service) {
55
+ for (const id of service.languageIds) {
56
+ if (!this.services.has(id)) {
57
+ this.services.set(id, []);
58
+ }
59
+ this.services.get(id).push(service);
60
+ }
61
+ }
62
+ static getService(languageId) {
63
+ const services = this.services.get(languageId);
64
+ if (!services || services.length === 0)
65
+ return undefined;
66
+ return new CompositeLanguageService(languageId, services);
67
+ }
68
+ static isSupported(languageId) {
69
+ return this.services.has(languageId);
70
+ }
71
+ }
72
+ exports.LanguageServiceRegistry = LanguageServiceRegistry;
73
+ _a = LanguageServiceRegistry;
74
+ LanguageServiceRegistry.services = new Map();
75
+ (() => {
76
+ _a.register(new HtmlLanguageService_1.HtmlLanguageService());
77
+ _a.register(new JavascriptLanguageService_1.JavascriptLanguageService());
78
+ _a.register(new PhpLanguageService_1.PhpLanguageService());
79
+ _a.register(new RazorLanguageService_1.RazorLanguageService());
80
+ _a.register(new ReactLanguageService_1.ReactLanguageService());
81
+ _a.register(new SvelteLanguageService_1.SvelteLanguageService());
82
+ _a.register(new VueLanguageService_1.VueLanguageService());
83
+ _a.register(new AngularLanguageService_1.AngularLanguageService());
84
+ _a.register(new TwigLanguageService_1.TwigLanguageService());
85
+ })();
86
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@f12io/maple-language-core",
3
+ "version": "0.0.2",
4
+ "description": "Editor-agnostic language tooling for the Maple CSS: region discovery, class extraction, and the class formatter shared by the VS Code extension and the Prettier plugin.",
5
+ "license": "ROOT",
6
+ "author": "f12.io",
7
+ "homepage": "https://github.com/f12io/maple-vscode-extension/tree/main/packages/core#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/f12io/maple-vscode-extension.git",
11
+ "directory": "packages/core"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/f12io/maple-vscode-extension/issues"
15
+ },
16
+ "keywords": [
17
+ "maple",
18
+ "css",
19
+ "utility-classes",
20
+ "formatter",
21
+ "language-tools"
22
+ ],
23
+ "main": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc -p tsconfig.json",
30
+ "clean": "rm -rf dist"
31
+ },
32
+ "dependencies": {
33
+ "@f12io/maple": "^2.0.21"
34
+ },
35
+ "engines": {
36
+ "node": ">=18"
37
+ }
38
+ }