@fieldia/monaco 0.0.0-stage → 0.14.1

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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -2
  3. package/package.json +37 -3
  4. package/src/index.d.mts +7 -0
  5. package/src/index.d.ts +7 -0
  6. package/src/index.js +14 -0
  7. package/src/index.js.map +1 -0
  8. package/src/index.mjs +7 -0
  9. package/src/index.mjs.map +1 -0
  10. package/src/lib/json.d.mts +30 -0
  11. package/src/lib/json.d.ts +30 -0
  12. package/src/lib/json.js +55 -0
  13. package/src/lib/json.js.map +1 -0
  14. package/src/lib/json.mjs +51 -0
  15. package/src/lib/json.mjs.map +1 -0
  16. package/src/lib/languages.d.mts +28 -0
  17. package/src/lib/languages.d.ts +28 -0
  18. package/src/lib/languages.js +112 -0
  19. package/src/lib/languages.js.map +1 -0
  20. package/src/lib/languages.mjs +107 -0
  21. package/src/lib/languages.mjs.map +1 -0
  22. package/src/lib/loader.d.mts +19 -0
  23. package/src/lib/loader.d.ts +19 -0
  24. package/src/lib/loader.js +164 -0
  25. package/src/lib/loader.js.map +1 -0
  26. package/src/lib/loader.mjs +161 -0
  27. package/src/lib/loader.mjs.map +1 -0
  28. package/src/lib/monaco.d.mts +38 -0
  29. package/src/lib/monaco.d.ts +38 -0
  30. package/src/lib/monaco.js +271 -0
  31. package/src/lib/monaco.js.map +1 -0
  32. package/src/lib/monaco.mjs +267 -0
  33. package/src/lib/monaco.mjs.map +1 -0
  34. package/src/lib/styles.d.mts +8 -0
  35. package/src/lib/styles.d.ts +8 -0
  36. package/src/lib/styles.js +40 -0
  37. package/src/lib/styles.js.map +1 -0
  38. package/src/lib/styles.mjs +36 -0
  39. package/src/lib/styles.mjs.map +1 -0
  40. package/src/lib/theme.d.mts +48 -0
  41. package/src/lib/theme.d.ts +48 -0
  42. package/src/lib/theme.js +154 -0
  43. package/src/lib/theme.js.map +1 -0
  44. package/src/lib/theme.mjs +148 -0
  45. package/src/lib/theme.mjs.map +1 -0
  46. package/src/lib/types.d.mts +72 -0
  47. package/src/lib/types.d.ts +72 -0
  48. package/src/lib/types.js +9 -0
  49. package/src/lib/types.js.map +1 -0
  50. package/src/lib/types.mjs +8 -0
  51. package/src/lib/types.mjs.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 fieldia-dev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,95 @@
1
- # Temporary Holding Version
1
+ # @fieldia/monaco
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [Fieldia](https://fieldia.dev) text and JSON fields in VS Code's editor,
4
+ [Monaco](https://microsoft.github.io/monaco-editor/): find and replace,
5
+ folding, several cursors, moving lines, VS Code's keys — coloured in the
6
+ language a page names, and wearing the form's theme.
7
+
8
+ ```sh
9
+ npm install @fieldia/monaco
10
+ ```
11
+
12
+ ```ts
13
+ import { mountViewer } from '@fieldia/viewer';
14
+ import { monacoWidgets } from '@fieldia/monaco';
15
+
16
+ mountViewer(host, { page, dataSource, widgets: monacoWidgets });
17
+ ```
18
+
19
+ A node opts in with `"widget": "monaco"`:
20
+
21
+ ```json
22
+ { "type": "field", "field": "script", "widget": "monaco", "options": { "language": "python" } }
23
+ ```
24
+
25
+ - `text.monaco`: a `text` field, in the language `options.language` names —
26
+ every name `@fieldia/code` takes (`python`, `sql`, `typescript`, `bash`…)
27
+ and Monaco's other grammars besides (GraphQL, SCSS, Elixir, F#, HCL…):
28
+ `MONACO_LANGUAGES` lists them. One Monaco has no grammar for is plain text.
29
+ - `json.monaco`: a `json` field, edited as JSON. Valid JSON reaches the form
30
+ as it is typed; text that is not valid is said so, and the last good value
31
+ stays.
32
+
33
+ Monaco is large (about 3 MB, 800 KB gzipped, with its editing features), so
34
+ it loads only when a page has such a field, and each language's grammar only
35
+ when a field uses it. Until it has loaded the field is a plain text box that
36
+ works as one — and stays one if Monaco cannot be loaded.
37
+
38
+ ## Your bundler
39
+
40
+ The widgets import `monaco-editor`'s ES modules, which import their own CSS.
41
+ Vite takes them as they are; webpack needs `style-loader` and `css-loader`
42
+ for `.css` (and `asset/resource` for `.ttf`); esbuild writes the CSS beside
43
+ your bundle, for your page to link, and needs `loader: { '.ttf': 'file' }`.
44
+ Build with code splitting (ES modules) so Monaco is a file of its own.
45
+
46
+ ## Language services (workers)
47
+
48
+ With nothing more, code is coloured and no worker is started. For JSON
49
+ checked as it is typed, and suggestions and checks for TypeScript,
50
+ JavaScript, CSS and HTML, give the widgets workers as Monaco asks for them:
51
+
52
+ ```ts
53
+ import { createMonacoWidgets } from '@fieldia/monaco';
54
+ // Vite: each worker is a module of monaco-editor's own.
55
+ import EditorWorker from 'monaco-editor/editor/editor.worker?worker';
56
+ import JsonWorker from 'monaco-editor/languages/features/json/json.worker?worker';
57
+ import TsWorker from 'monaco-editor/languages/features/typescript/ts.worker?worker';
58
+
59
+ const widgets = createMonacoWidgets({
60
+ getWorker: (_id, label) => {
61
+ if (label === 'json') return new JsonWorker();
62
+ if (label === 'typescript' || label === 'javascript') return new TsWorker();
63
+ return new EditorWorker();
64
+ },
65
+ // The services these workers are for; CSS's and HTML's fields ask for none.
66
+ services: ['json', 'typescript'],
67
+ });
68
+ ```
69
+
70
+ (`css.worker` and `html.worker` sit beside `json.worker`, under
71
+ `languages/features/css` and `languages/features/html`.) The function becomes
72
+ `MonacoEnvironment.getWorker`, unless your app has set a `MonacoEnvironment`
73
+ of its own, which is kept.
74
+
75
+ Each field turns on the service of its language, for every service Monaco
76
+ has. When you give workers for some of them only, name those, so the others'
77
+ fields ask for none: `createMonacoWidgets({ getWorker, services: ['json'] })`
78
+ (`json`, `typescript` — JavaScript's too —, `css` — SCSS's and Less's too —
79
+ and `html`).
80
+
81
+ ## Every editor
82
+
83
+ - Tab moves to the next field, as in every field; Ctrl+] and Ctrl+[ indent.
84
+ - Read-only when the field is; required, invalid and its messages said on
85
+ the editor's input, which the field's label names and points at.
86
+ - Grows with its text, from a few lines to a screenful; the page scrolls
87
+ past it under the mouse wheel.
88
+ - Its theme is made from Fieldia's tokens as the page has them (theme,
89
+ scheme, accent), and made again when they change. Code is coloured as in
90
+ `@fieldia/code`, light or dark with the page, readable on every theme's
91
+ surface; set your own with the `--fd-code-*` tokens. Monaco has one theme
92
+ per page: two forms in different looks share the last one drawn.
93
+ - Code reads left to right, on an Arabic page too.
94
+
95
+ MIT. Monaco is MIT too.
package/package.json CHANGED
@@ -1,6 +1,40 @@
1
1
  {
2
2
  "name": "@fieldia/monaco",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.14.1",
4
+ "description": "Fieldia text and JSON fields in VS Code’s editor (Monaco), coloured in the language a page names, following Fieldia’s themes.",
5
+ "license": "MIT",
6
+ "homepage": "https://fieldia.dev",
7
+ "type": "commonjs",
8
+ "main": "./src/index.js",
9
+ "module": "./src/index.mjs",
10
+ "types": "./src/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": {
14
+ "import": "./src/index.d.mts",
15
+ "require": "./src/index.d.ts"
16
+ },
17
+ "import": "./src/index.mjs",
18
+ "require": "./src/index.js",
19
+ "default": "./src/index.js"
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
23
+ "dependencies": {
24
+ "@fieldia/core": "0.14.1",
25
+ "@fieldia/widgets": "0.14.1",
26
+ "monaco-editor": "^0.57.0",
27
+ "tslib": "^2.8.1"
28
+ },
29
+ "sideEffects": false,
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/fieldia-dev/fieldia",
33
+ "directory": "libs/monaco"
34
+ },
35
+ "files": [
36
+ "src",
37
+ "README.md",
38
+ "LICENSE"
39
+ ]
6
40
  }
@@ -0,0 +1,7 @@
1
+ export * from './lib/monaco.mjs';
2
+ export * from './lib/languages.mjs';
3
+ export * from './lib/theme.mjs';
4
+ export * from './lib/styles.mjs';
5
+ export { defaultLoader } from './lib/loader.mjs';
6
+ export { JSON_GRAMMAR, registerJson } from './lib/json.mjs';
7
+ export type * from './lib/types.mjs';
package/src/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from './lib/monaco';
2
+ export * from './lib/languages';
3
+ export * from './lib/theme';
4
+ export * from './lib/styles';
5
+ export { defaultLoader } from './lib/loader';
6
+ export { JSON_GRAMMAR, registerJson } from './lib/json';
7
+ export type * from './lib/types';
package/src/index.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerJson = exports.JSON_GRAMMAR = exports.defaultLoader = void 0;
4
+ const tslib_1 = require("tslib");
5
+ tslib_1.__exportStar(require("./lib/monaco"), exports);
6
+ tslib_1.__exportStar(require("./lib/languages"), exports);
7
+ tslib_1.__exportStar(require("./lib/theme"), exports);
8
+ tslib_1.__exportStar(require("./lib/styles"), exports);
9
+ var loader_1 = require("./lib/loader");
10
+ Object.defineProperty(exports, "defaultLoader", { enumerable: true, get: function () { return loader_1.defaultLoader; } });
11
+ var json_1 = require("./lib/json");
12
+ Object.defineProperty(exports, "JSON_GRAMMAR", { enumerable: true, get: function () { return json_1.JSON_GRAMMAR; } });
13
+ Object.defineProperty(exports, "registerJson", { enumerable: true, get: function () { return json_1.registerJson; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/monaco/src/index.ts"],"names":[],"mappings":";;;;AAAA,uDAA6B;AAC7B,0DAAgC;AAChC,sDAA4B;AAC5B,uDAA6B;AAC7B,uCAA6C;AAApC,uGAAA,aAAa,OAAA;AACtB,mCAAwD;AAA/C,oGAAA,YAAY,OAAA;AAAE,oGAAA,YAAY,OAAA"}
package/src/index.mjs ADDED
@@ -0,0 +1,7 @@
1
+ export * from './lib/monaco.mjs';
2
+ export * from './lib/languages.mjs';
3
+ export * from './lib/theme.mjs';
4
+ export * from './lib/styles.mjs';
5
+ export { defaultLoader } from './lib/loader.mjs';
6
+ export { JSON_GRAMMAR, registerJson } from './lib/json.mjs';
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../libs/monaco/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { MonacoApi } from './types.mjs';
2
+ /**
3
+ * JSON coloured with no worker: a small Monarch grammar of the widgets' own —
4
+ * keys, strings, numbers, true, false and null, and comments for JSON with
5
+ * comments. Monaco's own JSON is a language service that runs in a worker; an
6
+ * app that gives workers gets that instead (`getWorker`).
7
+ */
8
+ export declare const JSON_GRAMMAR: {
9
+ defaultToken: string;
10
+ tokenPostfix: string;
11
+ tokenizer: {
12
+ root: (string | RegExp)[][];
13
+ comment: (string | RegExp)[][];
14
+ };
15
+ };
16
+ /** How JSON is edited: its brackets close themselves, and a quote its string. */
17
+ export declare const JSON_CONFIGURATION: {
18
+ comments: {
19
+ lineComment: string;
20
+ blockComment: string[];
21
+ };
22
+ brackets: string[][];
23
+ autoClosingPairs: {
24
+ open: string;
25
+ close: string;
26
+ notIn: string[];
27
+ }[];
28
+ };
29
+ /** JSON in Monaco, once: unless Monaco knows it already, from its own service. */
30
+ export declare function registerJson(monaco: MonacoApi): void;
@@ -0,0 +1,30 @@
1
+ import type { MonacoApi } from './types';
2
+ /**
3
+ * JSON coloured with no worker: a small Monarch grammar of the widgets' own —
4
+ * keys, strings, numbers, true, false and null, and comments for JSON with
5
+ * comments. Monaco's own JSON is a language service that runs in a worker; an
6
+ * app that gives workers gets that instead (`getWorker`).
7
+ */
8
+ export declare const JSON_GRAMMAR: {
9
+ defaultToken: string;
10
+ tokenPostfix: string;
11
+ tokenizer: {
12
+ root: (string | RegExp)[][];
13
+ comment: (string | RegExp)[][];
14
+ };
15
+ };
16
+ /** How JSON is edited: its brackets close themselves, and a quote its string. */
17
+ export declare const JSON_CONFIGURATION: {
18
+ comments: {
19
+ lineComment: string;
20
+ blockComment: string[];
21
+ };
22
+ brackets: string[][];
23
+ autoClosingPairs: {
24
+ open: string;
25
+ close: string;
26
+ notIn: string[];
27
+ }[];
28
+ };
29
+ /** JSON in Monaco, once: unless Monaco knows it already, from its own service. */
30
+ export declare function registerJson(monaco: MonacoApi): void;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JSON_CONFIGURATION = exports.JSON_GRAMMAR = void 0;
4
+ exports.registerJson = registerJson;
5
+ /**
6
+ * JSON coloured with no worker: a small Monarch grammar of the widgets' own —
7
+ * keys, strings, numbers, true, false and null, and comments for JSON with
8
+ * comments. Monaco's own JSON is a language service that runs in a worker; an
9
+ * app that gives workers gets that instead (`getWorker`).
10
+ */
11
+ exports.JSON_GRAMMAR = {
12
+ defaultToken: '',
13
+ tokenPostfix: '.json',
14
+ tokenizer: {
15
+ root: [
16
+ [/"(?:[^"\\]|\\.)*"(?=\s*:)/, 'string.key'],
17
+ [/"(?:[^"\\]|\\.)*"/, 'string.value'],
18
+ [/"(?:[^"\\]|\\.)*$/, 'string.invalid'],
19
+ [/-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/, 'number'],
20
+ [/\b(?:true|false|null)\b/, 'keyword'],
21
+ [/\/\/.*$/, 'comment'],
22
+ [/\/\*/, 'comment', '@comment'],
23
+ [/[{}[\]]/, '@brackets'],
24
+ [/[,:]/, 'delimiter'],
25
+ [/\s+/, 'white'],
26
+ ],
27
+ comment: [
28
+ [/[^*/]+/, 'comment'],
29
+ [/\*\//, 'comment', '@pop'],
30
+ [/[*/]/, 'comment'],
31
+ ],
32
+ },
33
+ };
34
+ /** How JSON is edited: its brackets close themselves, and a quote its string. */
35
+ exports.JSON_CONFIGURATION = {
36
+ comments: { lineComment: '//', blockComment: ['/*', '*/'] },
37
+ brackets: [
38
+ ['{', '}'],
39
+ ['[', ']'],
40
+ ],
41
+ autoClosingPairs: [
42
+ { open: '{', close: '}', notIn: ['string'] },
43
+ { open: '[', close: ']', notIn: ['string'] },
44
+ { open: '"', close: '"', notIn: ['string'] },
45
+ ],
46
+ };
47
+ /** JSON in Monaco, once: unless Monaco knows it already, from its own service. */
48
+ function registerJson(monaco) {
49
+ if (monaco.languages.getLanguages().some((language) => language.id === 'json'))
50
+ return;
51
+ monaco.languages.register({ id: 'json', extensions: ['.json'], aliases: ['JSON', 'json'] });
52
+ monaco.languages.setMonarchTokensProvider('json', exports.JSON_GRAMMAR);
53
+ monaco.languages.setLanguageConfiguration('json', exports.JSON_CONFIGURATION);
54
+ }
55
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/json.ts"],"names":[],"mappings":";;;AA+CA,oCAKC;AAlDD;;;;;GAKG;AACU,QAAA,YAAY,GAAG;IAC1B,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE;QACT,IAAI,EAAE;YACJ,CAAC,2BAA2B,EAAE,YAAY,CAAC;YAC3C,CAAC,mBAAmB,EAAE,cAAc,CAAC;YACrC,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;YACvC,CAAC,6CAA6C,EAAE,QAAQ,CAAC;YACzD,CAAC,yBAAyB,EAAE,SAAS,CAAC;YACtC,CAAC,SAAS,EAAE,SAAS,CAAC;YACtB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;YAC/B,CAAC,SAAS,EAAE,WAAW,CAAC;YACxB,CAAC,MAAM,EAAE,WAAW,CAAC;YACrB,CAAC,KAAK,EAAE,OAAO,CAAC;SACjB;QACD,OAAO,EAAE;YACP,CAAC,QAAQ,EAAE,SAAS,CAAC;YACrB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;YAC3B,CAAC,MAAM,EAAE,SAAS,CAAC;SACpB;KACF;CACF,CAAC;AAEF,iFAAiF;AACpE,QAAA,kBAAkB,GAAG;IAChC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;IAC3D,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,GAAG,EAAE,GAAG,CAAC;KACX;IACD,gBAAgB,EAAE;QAChB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC5C,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC5C,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;KAC7C;CACF,CAAC;AAEF,kFAAkF;AAClF,SAAgB,YAAY,CAAC,MAAiB;IAC5C,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC;QAAE,OAAO;IACvF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,oBAAY,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,0BAAkB,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * JSON coloured with no worker: a small Monarch grammar of the widgets' own —
3
+ * keys, strings, numbers, true, false and null, and comments for JSON with
4
+ * comments. Monaco's own JSON is a language service that runs in a worker; an
5
+ * app that gives workers gets that instead (`getWorker`).
6
+ */
7
+ export const JSON_GRAMMAR = {
8
+ defaultToken: '',
9
+ tokenPostfix: '.json',
10
+ tokenizer: {
11
+ root: [
12
+ [/"(?:[^"\\]|\\.)*"(?=\s*:)/, 'string.key'],
13
+ [/"(?:[^"\\]|\\.)*"/, 'string.value'],
14
+ [/"(?:[^"\\]|\\.)*$/, 'string.invalid'],
15
+ [/-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/, 'number'],
16
+ [/\b(?:true|false|null)\b/, 'keyword'],
17
+ [/\/\/.*$/, 'comment'],
18
+ [/\/\*/, 'comment', '@comment'],
19
+ [/[{}[\]]/, '@brackets'],
20
+ [/[,:]/, 'delimiter'],
21
+ [/\s+/, 'white'],
22
+ ],
23
+ comment: [
24
+ [/[^*/]+/, 'comment'],
25
+ [/\*\//, 'comment', '@pop'],
26
+ [/[*/]/, 'comment'],
27
+ ],
28
+ },
29
+ };
30
+ /** How JSON is edited: its brackets close themselves, and a quote its string. */
31
+ export const JSON_CONFIGURATION = {
32
+ comments: { lineComment: '//', blockComment: ['/*', '*/'] },
33
+ brackets: [
34
+ ['{', '}'],
35
+ ['[', ']'],
36
+ ],
37
+ autoClosingPairs: [
38
+ { open: '{', close: '}', notIn: ['string'] },
39
+ { open: '[', close: ']', notIn: ['string'] },
40
+ { open: '"', close: '"', notIn: ['string'] },
41
+ ],
42
+ };
43
+ /** JSON in Monaco, once: unless Monaco knows it already, from its own service. */
44
+ export function registerJson(monaco) {
45
+ if (monaco.languages.getLanguages().some((language) => language.id === 'json'))
46
+ return;
47
+ monaco.languages.register({ id: 'json', extensions: ['.json'], aliases: ['JSON', 'json'] });
48
+ monaco.languages.setMonarchTokensProvider('json', JSON_GRAMMAR);
49
+ monaco.languages.setLanguageConfiguration('json', JSON_CONFIGURATION);
50
+ }
51
+ //# sourceMappingURL=json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.mjs","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/json.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE;QACT,IAAI,EAAE;YACJ,CAAC,2BAA2B,EAAE,YAAY,CAAC;YAC3C,CAAC,mBAAmB,EAAE,cAAc,CAAC;YACrC,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;YACvC,CAAC,6CAA6C,EAAE,QAAQ,CAAC;YACzD,CAAC,yBAAyB,EAAE,SAAS,CAAC;YACtC,CAAC,SAAS,EAAE,SAAS,CAAC;YACtB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;YAC/B,CAAC,SAAS,EAAE,WAAW,CAAC;YACxB,CAAC,MAAM,EAAE,WAAW,CAAC;YACrB,CAAC,KAAK,EAAE,OAAO,CAAC;SACjB;QACD,OAAO,EAAE;YACP,CAAC,QAAQ,EAAE,SAAS,CAAC;YACrB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;YAC3B,CAAC,MAAM,EAAE,SAAS,CAAC;SACpB;KACF;CACF,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;IAC3D,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,GAAG,EAAE,GAAG,CAAC;KACX;IACD,gBAAgB,EAAE;QAChB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC5C,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC5C,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;KAC7C;CACF,CAAC;AAEF,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC;QAAE,OAAO;IACvF,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The languages a field in VS Code's editor can be written in
3
+ * (`options.language`): every name @fieldia/code takes, so a page reads alike
4
+ * in either editor, and Monaco's other grammars besides. Each is Monaco's own
5
+ * Monarch grammar, loaded when a field first asks for it (loader.ts); one
6
+ * Monaco has none for is plain text.
7
+ */
8
+ export interface MonacoLanguage {
9
+ /** The name a page gives it: `{ "widget": "monaco", "options": { "language": "python" } }`. */
10
+ id: string;
11
+ /** Its name as people know it. */
12
+ name: string;
13
+ /** Other names a page may give it. */
14
+ aliases: readonly string[];
15
+ /** Monaco's id for it, as the editor's model is given it; `plaintext` for one Monaco has no grammar for. */
16
+ monaco: string;
17
+ /** The folder of monaco-editor's grammar that registers it, under languages/definitions; null for none. */
18
+ definition: string | null;
19
+ }
20
+ /** Every language, in the order a person picking one reads them: @fieldia/code's, then Monaco's own. */
21
+ export declare const MONACO_LANGUAGES: readonly MonacoLanguage[];
22
+ /** The language a page names, by its id or another of its names, in any case; null for one no editor knows. */
23
+ export declare function monacoLanguage(name: unknown): MonacoLanguage | null;
24
+ /** Monaco's language services: each runs in a worker of its own, which the app gives (`getWorker`). */
25
+ export type MonacoService = 'json' | 'typescript' | 'css' | 'html';
26
+ export declare const MONACO_SERVICES: readonly MonacoService[];
27
+ /** The language service a language a page names has in Monaco, or null for one with none. */
28
+ export declare function serviceOf(name: unknown): MonacoService | null;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The languages a field in VS Code's editor can be written in
3
+ * (`options.language`): every name @fieldia/code takes, so a page reads alike
4
+ * in either editor, and Monaco's other grammars besides. Each is Monaco's own
5
+ * Monarch grammar, loaded when a field first asks for it (loader.ts); one
6
+ * Monaco has none for is plain text.
7
+ */
8
+ export interface MonacoLanguage {
9
+ /** The name a page gives it: `{ "widget": "monaco", "options": { "language": "python" } }`. */
10
+ id: string;
11
+ /** Its name as people know it. */
12
+ name: string;
13
+ /** Other names a page may give it. */
14
+ aliases: readonly string[];
15
+ /** Monaco's id for it, as the editor's model is given it; `plaintext` for one Monaco has no grammar for. */
16
+ monaco: string;
17
+ /** The folder of monaco-editor's grammar that registers it, under languages/definitions; null for none. */
18
+ definition: string | null;
19
+ }
20
+ /** Every language, in the order a person picking one reads them: @fieldia/code's, then Monaco's own. */
21
+ export declare const MONACO_LANGUAGES: readonly MonacoLanguage[];
22
+ /** The language a page names, by its id or another of its names, in any case; null for one no editor knows. */
23
+ export declare function monacoLanguage(name: unknown): MonacoLanguage | null;
24
+ /** Monaco's language services: each runs in a worker of its own, which the app gives (`getWorker`). */
25
+ export type MonacoService = 'json' | 'typescript' | 'css' | 'html';
26
+ export declare const MONACO_SERVICES: readonly MonacoService[];
27
+ /** The language service a language a page names has in Monaco, or null for one with none. */
28
+ export declare function serviceOf(name: unknown): MonacoService | null;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * The languages a field in VS Code's editor can be written in
4
+ * (`options.language`): every name @fieldia/code takes, so a page reads alike
5
+ * in either editor, and Monaco's other grammars besides. Each is Monaco's own
6
+ * Monarch grammar, loaded when a field first asks for it (loader.ts); one
7
+ * Monaco has none for is plain text.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MONACO_SERVICES = exports.MONACO_LANGUAGES = void 0;
11
+ exports.monacoLanguage = monacoLanguage;
12
+ exports.serviceOf = serviceOf;
13
+ const language = (id, name, monaco, definition, ...aliases) => ({ id, name, monaco, definition, aliases });
14
+ /** Every language, in the order a person picking one reads them: @fieldia/code's, then Monaco's own. */
15
+ exports.MONACO_LANGUAGES = [
16
+ language('javascript', 'JavaScript', 'javascript', 'javascript', 'js', 'mjs', 'cjs', 'node'),
17
+ language('typescript', 'TypeScript', 'typescript', 'typescript', 'ts', 'mts', 'cts'),
18
+ language('jsx', 'JavaScript with JSX', 'javascript', 'javascript'),
19
+ language('tsx', 'TypeScript with JSX', 'typescript', 'typescript'),
20
+ language('python', 'Python', 'python', 'python', 'py', 'python3'),
21
+ language('sql', 'SQL', 'sql', 'sql'),
22
+ language('postgresql', 'PostgreSQL', 'pgsql', 'pgsql', 'postgres', 'pgsql', 'psql'),
23
+ language('mysql', 'MySQL', 'mysql', 'mysql', 'mariadb'),
24
+ language('sqlite', 'SQLite', 'sql', 'sql'),
25
+ language('mssql', 'SQL Server', 'sql', 'sql', 'tsql', 't-sql', 'sqlserver'),
26
+ language('html', 'HTML', 'html', 'html', 'htm', 'xhtml'),
27
+ language('css', 'CSS', 'css', 'css'),
28
+ language('xml', 'XML', 'xml', 'xml', 'svg', 'xsl'),
29
+ language('yaml', 'YAML', 'yaml', 'yaml', 'yml'),
30
+ language('markdown', 'Markdown', 'markdown', 'markdown', 'md'),
31
+ language('json', 'JSON', 'json', null, 'jsonc'),
32
+ language('java', 'Java', 'java', 'java'),
33
+ language('c', 'C', 'c', 'cpp', 'h'),
34
+ language('cpp', 'C++', 'cpp', 'cpp', 'c++', 'cc', 'cxx', 'hpp'),
35
+ language('php', 'PHP', 'php', 'php'),
36
+ language('rust', 'Rust', 'rust', 'rust', 'rs'),
37
+ language('go', 'Go', 'go', 'go', 'golang'),
38
+ language('shell', 'Shell', 'shell', 'shell', 'sh', 'bash', 'zsh'),
39
+ language('powershell', 'PowerShell', 'powershell', 'powershell', 'ps1', 'pwsh'),
40
+ language('ruby', 'Ruby', 'ruby', 'ruby', 'rb'),
41
+ language('perl', 'Perl', 'perl', 'perl', 'pl'),
42
+ language('lua', 'Lua', 'lua', 'lua'),
43
+ language('r', 'R', 'r', 'r'),
44
+ language('swift', 'Swift', 'swift', 'swift'),
45
+ language('kotlin', 'Kotlin', 'kotlin', 'kotlin', 'kt', 'kts'),
46
+ language('csharp', 'C#', 'csharp', 'csharp', 'c#', 'cs'),
47
+ language('scala', 'Scala', 'scala', 'scala'),
48
+ language('dart', 'Dart', 'dart', 'dart'),
49
+ language('dockerfile', 'Dockerfile', 'dockerfile', 'dockerfile', 'docker'),
50
+ language('toml', 'TOML', 'ini', 'ini'),
51
+ language('ini', 'INI', 'ini', 'ini', 'properties', 'conf'),
52
+ language('diff', 'Diff', 'plaintext', null, 'patch'),
53
+ language('nginx', 'nginx', 'plaintext', null),
54
+ language('protobuf', 'Protocol Buffers', 'proto', 'protobuf', 'proto'),
55
+ language('haskell', 'Haskell', 'plaintext', null, 'hs'),
56
+ language('clojure', 'Clojure', 'clojure', 'clojure', 'clj'),
57
+ language('erlang', 'Erlang', 'plaintext', null, 'erl'),
58
+ language('groovy', 'Groovy', 'plaintext', null, 'gradle'),
59
+ language('julia', 'Julia', 'julia', 'julia', 'jl'),
60
+ language('graphql', 'GraphQL', 'graphql', 'graphql', 'gql'),
61
+ language('scss', 'SCSS', 'scss', 'scss', 'sass'),
62
+ language('less', 'Less', 'less', 'less'),
63
+ language('bat', 'Batch', 'bat', 'bat', 'batch', 'cmd'),
64
+ language('vb', 'Visual Basic', 'vb', 'vb', 'vbnet', 'vb.net'),
65
+ language('fsharp', 'F#', 'fsharp', 'fsharp', 'f#', 'fs'),
66
+ language('objective-c', 'Objective-C', 'objective-c', 'objective-c', 'objc', 'objectivec'),
67
+ language('elixir', 'Elixir', 'elixir', 'elixir', 'ex', 'exs'),
68
+ language('pascal', 'Pascal', 'pascal', 'pascal', 'delphi'),
69
+ language('solidity', 'Solidity', 'sol', 'solidity', 'sol'),
70
+ language('twig', 'Twig', 'twig', 'twig'),
71
+ language('handlebars', 'Handlebars', 'handlebars', 'handlebars', 'hbs'),
72
+ language('razor', 'Razor', 'razor', 'razor', 'cshtml'),
73
+ language('pug', 'Pug', 'pug', 'pug', 'jade'),
74
+ language('hcl', 'HCL', 'hcl', 'hcl', 'terraform', 'tf'),
75
+ language('bicep', 'Bicep', 'bicep', 'bicep'),
76
+ language('redis', 'Redis', 'redis', 'redis'),
77
+ language('tcl', 'Tcl', 'tcl', 'tcl'),
78
+ language('scheme', 'Scheme', 'scheme', 'scheme'),
79
+ language('coffeescript', 'CoffeeScript', 'coffeescript', 'coffee', 'coffee'),
80
+ language('apex', 'Apex', 'apex', 'apex'),
81
+ language('abap', 'ABAP', 'abap', 'abap'),
82
+ language('cypher', 'Cypher', 'cypher', 'cypher'),
83
+ language('sparql', 'SPARQL', 'sparql', 'sparql'),
84
+ language('wgsl', 'WGSL', 'wgsl', 'wgsl'),
85
+ language('liquid', 'Liquid', 'liquid', 'liquid'),
86
+ language('mdx', 'MDX', 'mdx', 'mdx'),
87
+ language('restructuredtext', 'reStructuredText', 'restructuredtext', 'restructuredtext', 'rst'),
88
+ language('systemverilog', 'SystemVerilog', 'systemverilog', 'systemverilog', 'sv'),
89
+ language('verilog', 'Verilog', 'verilog', 'systemverilog', 'v'),
90
+ language('qsharp', 'Q#', 'qsharp', 'qsharp', 'q#'),
91
+ language('powerquery', 'Power Query', 'powerquery', 'powerquery', 'm'),
92
+ language('dax', 'DAX', 'msdax', 'msdax', 'msdax'),
93
+ language('redshift', 'Redshift', 'redshift', 'redshift'),
94
+ language('structured-text', 'Structured Text', 'st', 'st', 'st', 'iec-61131'),
95
+ language('mips', 'MIPS assembly', 'mips', 'mips'),
96
+ language('freemarker', 'FreeMarker', 'freemarker2', 'freemarker2', 'ftl', 'freemarker2'),
97
+ language('typespec', 'TypeSpec', 'typespec', 'typespec', 'tsp'),
98
+ language('azcli', 'Azure CLI', 'azcli', 'azcli'),
99
+ ];
100
+ const BY_NAME = new Map(exports.MONACO_LANGUAGES.flatMap((found) => [found.id, ...found.aliases].map((name) => [name, found])));
101
+ /** The language a page names, by its id or another of its names, in any case; null for one no editor knows. */
102
+ function monacoLanguage(name) {
103
+ return typeof name === 'string' ? BY_NAME.get(name.trim().toLowerCase()) ?? null : null;
104
+ }
105
+ exports.MONACO_SERVICES = ['json', 'typescript', 'css', 'html'];
106
+ const SERVICE_OF = { json: 'json', typescript: 'typescript', javascript: 'typescript', css: 'css', scss: 'css', less: 'css', html: 'html' };
107
+ /** The language service a language a page names has in Monaco, or null for one with none. */
108
+ function serviceOf(name) {
109
+ const found = monacoLanguage(name);
110
+ return found ? SERVICE_OF[found.monaco] ?? null : null;
111
+ }
112
+ //# sourceMappingURL=languages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../../../libs/monaco/src/lib/languages.ts"],"names":[],"mappings":"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"}