@jupyterlab/json-extension 4.0.6 → 4.1.0-alpha.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.
package/README.md CHANGED
@@ -40,4 +40,4 @@ To render a `.json` file, simply open it:
40
40
 
41
41
  ## Development
42
42
 
43
- See the [JupyterLab Contributor Documentation](https://github.com/jupyterlab/jupyterlab/blob/4.0.x/CONTRIBUTING.md).
43
+ See the [JupyterLab Contributor Documentation](https://github.com/jupyterlab/jupyterlab/blob/main/CONTRIBUTING.md).
package/lib/index.d.ts CHANGED
@@ -11,6 +11,7 @@ import { Widget } from '@lumino/widgets';
11
11
  * The MIME type for JSON.
12
12
  */
13
13
  export declare const MIME_TYPE = "application/json";
14
+ export declare const MIME_TYPES_JSONL: string[];
14
15
  /**
15
16
  * A renderer for JSON data.
16
17
  */
package/lib/index.js CHANGED
@@ -17,6 +17,12 @@ const CSS_CLASS = 'jp-RenderedJSON';
17
17
  * The MIME type for JSON.
18
18
  */
19
19
  export const MIME_TYPE = 'application/json';
20
+ // NOTE: not standardized yet
21
+ export const MIME_TYPES_JSONL = [
22
+ 'text/jsonl',
23
+ 'application/jsonl',
24
+ 'application/json-lines'
25
+ ];
20
26
  /**
21
27
  * A renderer for JSON data.
22
28
  */
@@ -40,7 +46,18 @@ export class RenderedJSON extends Widget {
40
46
  */
41
47
  async renderModel(model) {
42
48
  const { Component } = await import('./component');
43
- const data = (model.data[this._mimeType] || {});
49
+ let data;
50
+ // handle if json-lines format
51
+ if (MIME_TYPES_JSONL.indexOf(this._mimeType) >= 0) {
52
+ // convert into proper json
53
+ const lines = (model.data[this._mimeType] || '')
54
+ .trim()
55
+ .split(/\n/);
56
+ data = JSON.parse(`[${lines.join(',')}]`);
57
+ }
58
+ else {
59
+ data = (model.data[this._mimeType] || {});
60
+ }
44
61
  const metadata = (model.metadata[this._mimeType] || {});
45
62
  if (this._rootDOM === null) {
46
63
  this._rootDOM = createRoot(this.node);
@@ -65,7 +82,7 @@ export class RenderedJSON extends Widget {
65
82
  */
66
83
  export const rendererFactory = {
67
84
  safe: true,
68
- mimeTypes: [MIME_TYPE],
85
+ mimeTypes: [MIME_TYPE, ...MIME_TYPES_JSONL],
69
86
  createRenderer: options => new RenderedJSON(options)
70
87
  };
71
88
  const extensions = [
@@ -82,6 +99,19 @@ const extensions = [
82
99
  fileTypes: ['json', 'notebook', 'geojson'],
83
100
  defaultFor: ['json']
84
101
  }
102
+ },
103
+ {
104
+ id: '@jupyterlab/json-lines-extension:factory',
105
+ description: 'Adds renderer for JSONLines content.',
106
+ rendererFactory,
107
+ rank: 0,
108
+ dataType: 'string',
109
+ documentWidgetFactoryOptions: {
110
+ name: 'JSONLines',
111
+ primaryFileType: 'jsonl',
112
+ fileTypes: ['jsonl', 'ndjson'],
113
+ defaultFor: ['jsonl', 'ndjson']
114
+ }
85
115
  }
86
116
  ];
87
117
  export default extensions;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyterlab/json-extension",
3
- "version": "4.0.6",
3
+ "version": "4.1.0-alpha.2",
4
4
  "description": "JupyterLab - JSON Renderer",
5
5
  "homepage": "https://github.com/jupyterlab/jupyterlab",
6
6
  "bugs": {
@@ -33,15 +33,15 @@
33
33
  "watch": "tsc -b --watch"
34
34
  },
35
35
  "dependencies": {
36
- "@jupyterlab/apputils": "^4.1.6",
37
- "@jupyterlab/codemirror": "^4.0.6",
38
- "@jupyterlab/rendermime-interfaces": "^3.8.6",
39
- "@jupyterlab/translation": "^4.0.6",
40
- "@jupyterlab/ui-components": "^4.0.6",
36
+ "@jupyterlab/apputils": "^4.2.0-alpha.2",
37
+ "@jupyterlab/codemirror": "^4.1.0-alpha.2",
38
+ "@jupyterlab/rendermime-interfaces": "^3.8.3-alpha.1",
39
+ "@jupyterlab/translation": "^4.1.0-alpha.2",
40
+ "@jupyterlab/ui-components": "^4.1.0-alpha.2",
41
41
  "@lezer/highlight": "^1.1.4",
42
42
  "@lumino/coreutils": "^2.1.2",
43
43
  "@lumino/messaging": "^2.0.1",
44
- "@lumino/widgets": "^2.3.0",
44
+ "@lumino/widgets": "^2.3.1-alpha.0",
45
45
  "react": "^18.2.0",
46
46
  "react-dom": "^18.2.0",
47
47
  "react-highlight-words": "^0.20.0",
package/src/index.tsx CHANGED
@@ -23,6 +23,12 @@ const CSS_CLASS = 'jp-RenderedJSON';
23
23
  * The MIME type for JSON.
24
24
  */
25
25
  export const MIME_TYPE = 'application/json';
26
+ // NOTE: not standardized yet
27
+ export const MIME_TYPES_JSONL = [
28
+ 'text/jsonl',
29
+ 'application/jsonl',
30
+ 'application/json-lines'
31
+ ];
26
32
 
27
33
  /**
28
34
  * A renderer for JSON data.
@@ -51,7 +57,20 @@ export class RenderedJSON
51
57
  */
52
58
  async renderModel(model: IRenderMime.IMimeModel): Promise<void> {
53
59
  const { Component } = await import('./component');
54
- const data = (model.data[this._mimeType] || {}) as NonNullable<JSONValue>;
60
+
61
+ let data: NonNullable<JSONValue>;
62
+
63
+ // handle if json-lines format
64
+ if (MIME_TYPES_JSONL.indexOf(this._mimeType) >= 0) {
65
+ // convert into proper json
66
+ const lines = ((model.data[this._mimeType] || '') as string)
67
+ .trim()
68
+ .split(/\n/);
69
+ data = JSON.parse(`[${lines.join(',')}]`);
70
+ } else {
71
+ data = (model.data[this._mimeType] || {}) as NonNullable<JSONValue>;
72
+ }
73
+
55
74
  const metadata = (model.metadata[this._mimeType] || {}) as JSONObject;
56
75
  if (this._rootDOM === null) {
57
76
  this._rootDOM = createRoot(this.node);
@@ -89,7 +108,7 @@ export class RenderedJSON
89
108
  */
90
109
  export const rendererFactory: IRenderMime.IRendererFactory = {
91
110
  safe: true,
92
- mimeTypes: [MIME_TYPE],
111
+ mimeTypes: [MIME_TYPE, ...MIME_TYPES_JSONL],
93
112
  createRenderer: options => new RenderedJSON(options)
94
113
  };
95
114
 
@@ -107,6 +126,19 @@ const extensions: IRenderMime.IExtension | IRenderMime.IExtension[] = [
107
126
  fileTypes: ['json', 'notebook', 'geojson'],
108
127
  defaultFor: ['json']
109
128
  }
129
+ },
130
+ {
131
+ id: '@jupyterlab/json-lines-extension:factory',
132
+ description: 'Adds renderer for JSONLines content.',
133
+ rendererFactory,
134
+ rank: 0,
135
+ dataType: 'string',
136
+ documentWidgetFactoryOptions: {
137
+ name: 'JSONLines',
138
+ primaryFileType: 'jsonl',
139
+ fileTypes: ['jsonl', 'ndjson'],
140
+ defaultFor: ['jsonl', 'ndjson']
141
+ }
110
142
  }
111
143
  ];
112
144