@hpcc-js/observablehq-compiler 1.1.0

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 (46) hide show
  1. package/README.md +106 -0
  2. package/bin/ojscc.mjs +75 -0
  3. package/dist/index.css +1 -0
  4. package/dist/index.esm.css +1 -0
  5. package/dist/index.esm.js +7168 -0
  6. package/dist/index.esm.js.map +1 -0
  7. package/dist/index.js +7176 -0
  8. package/dist/index.js.map +1 -0
  9. package/package.json +80 -0
  10. package/src/__package__.ts +3 -0
  11. package/src/__tests__/File Attachments.ts +895 -0
  12. package/src/__tests__/Introduction to Imports.ts +749 -0
  13. package/src/__tests__/Observable TimeChart.ts +772 -0
  14. package/src/__tests__/index.ts +13 -0
  15. package/src/__tests__/node.ts +177 -0
  16. package/src/__tests__/tsconfig.json +21 -0
  17. package/src/compiler.md +234 -0
  18. package/src/compiler.ts +264 -0
  19. package/src/cst.ts +172 -0
  20. package/src/index.css +460 -0
  21. package/src/index.ts +7 -0
  22. package/src/util.md +113 -0
  23. package/src/util.ts +154 -0
  24. package/src/writer.ts +80 -0
  25. package/types/__package__.d.ts +4 -0
  26. package/types/__package__.d.ts.map +1 -0
  27. package/types/__tests__/File Attachments.d.ts +110 -0
  28. package/types/__tests__/File Attachments.d.ts.map +1 -0
  29. package/types/__tests__/Introduction to Imports.d.ts +120 -0
  30. package/types/__tests__/Introduction to Imports.d.ts.map +1 -0
  31. package/types/__tests__/Observable TimeChart.d.ts +111 -0
  32. package/types/__tests__/Observable TimeChart.d.ts.map +1 -0
  33. package/types/__tests__/index.d.ts +2 -0
  34. package/types/__tests__/index.d.ts.map +1 -0
  35. package/types/__tests__/node.d.ts +2 -0
  36. package/types/__tests__/node.d.ts.map +1 -0
  37. package/types/compiler.d.ts +88 -0
  38. package/types/compiler.d.ts.map +1 -0
  39. package/types/cst.d.ts +42 -0
  40. package/types/cst.d.ts.map +1 -0
  41. package/types/index.d.ts +6 -0
  42. package/types/index.d.ts.map +1 -0
  43. package/types/util.d.ts +26 -0
  44. package/types/util.d.ts.map +1 -0
  45. package/types/writer.d.ts +19 -0
  46. package/types/writer.d.ts.map +1 -0
package/src/util.md ADDED
@@ -0,0 +1,113 @@
1
+ # Utilities
2
+
3
+ Various utilities and helpers.
4
+
5
+ ---
6
+
7
+ <a name="download" href="#download">#</a> **download**(_impUrl_) => Promise\<ohq.Module\> · [<>](https://github.com/hpcc-systems/Visualization/blob/trunk/packages/observablehq/compiler/src/util.ts "Source")
8
+
9
+ * _impUrl_: Full url to Obaservable HQ notebook as a string.
10
+ * _returns_: Returns a Promise of a notebook (a JSON object).
11
+
12
+ Downloads a notebook directly from [Observable HQ](https://observablehq.com/) as a JSON object. The following example downloads the [@observablehq/plot](https://observablehq.com/@observablehq/plot) notebook as JSON:
13
+
14
+ <ClientOnly>
15
+ <hpcc-vitepress style="width:100%;height:600px">
16
+ <hpcc-codemirror id="placeholder" mode="json" theme="dark" style="width:100%;height:100%">
17
+ </hpcc-codemirror>
18
+ <script type="module">
19
+ import "@hpcc-js/wc-editor";
20
+ import { download } from "@hpcc-js/observablehq-compiler";
21
+
22
+ const notebook = await download("https://observablehq.com/@observablehq/plot");
23
+ const placeholder = document.getElementById("placeholder");
24
+ placeholder.text = JSON.stringify(notebook, undefined, 4);
25
+ </script>
26
+ </hpcc-vitepress>
27
+ </ClientOnly>
28
+
29
+ ---
30
+
31
+ <a name="ojs2notebook" href="#ojs2notebook">#</a> **ojs2notebook**(_ojs_) => ohq.Module · [<>](https://github.com/hpcc-systems/Visualization/blob/trunk/packages/observablehq/compiler/src/util.ts "Source")
32
+
33
+ * _ojs_: String containing Observable JavaScript.
34
+ * _returns_: Returns the notebook as a JSON object.
35
+
36
+ Transforms Observable JavaScript to a JSON notebook.
37
+
38
+ <ClientOnly>
39
+ <hpcc-vitepress style="width:100%;height:600px">
40
+ <hpcc-codemirror id="placeholder" mode="json" theme="dark" style="width:100%;height:100%">
41
+ </hpcc-codemirror>
42
+ <script type="module">
43
+ import "@hpcc-js/wc-editor";
44
+ import { ojs2notebook } from "@hpcc-js/observablehq-compiler";
45
+
46
+ const notebook = ojs2notebook(`
47
+ md\`# Simple Notebook\`
48
+ a = 1
49
+ b = 2
50
+ c = a + b
51
+ d = {
52
+ yield 1;
53
+ yield 2;
54
+ yield 3;
55
+ }
56
+
57
+ viewof e = {
58
+ let output = {};
59
+ let listeners = [];
60
+ output.value = 10;
61
+ output.addEventListener = (listener) => listeners.push(listener);;
62
+ output.removeEventListener = (listener) => {
63
+ listeners = listeners.filter(l => l !== listener);
64
+ };
65
+ return output;
66
+ }
67
+ `);
68
+ const placeholder = document.getElementById("placeholder");
69
+ placeholder.text = JSON.stringify(notebook, undefined, 4);
70
+ </script>
71
+ </hpcc-vitepress>
72
+ </ClientOnly>
73
+
74
+ <a name="omd2notebook" href="#omd2notebook">#</a> **omd2notebook**(_omd_) => ohq.Module · [<>](https://github.com/hpcc-systems/Visualization/blob/trunk/packages/observablehq/compiler/src/util.ts "Source")
75
+
76
+ * _omd_: String containing Observable Markdown.
77
+ * _returns_: Returns the notebook as a JSON object.
78
+
79
+ Transforms Observable Markdown to a JSON notebook.
80
+
81
+ <ClientOnly>
82
+ <hpcc-vitepress style="width:100%;height:600px">
83
+ <hpcc-codemirror id="placeholder" mode="json" theme="dark" style="width:100%;height:100%">
84
+ </hpcc-codemirror>
85
+ <script type="module">
86
+ import "@hpcc-js/wc-editor";
87
+ import { omd2notebook } from "@hpcc-js/observablehq-compiler";
88
+
89
+ const notebook = omd2notebook(`\
90
+ # Simple Notebook
91
+
92
+ * Set A
93
+ \`\`\`
94
+ a = 1
95
+ \`\`\`
96
+
97
+ * Set B
98
+ \`\`\`
99
+ b = 2
100
+ \`\`\`
101
+
102
+ * Calculate c
103
+
104
+ \`\`\`
105
+ c = a + b
106
+ \`\`\`
107
+ `);
108
+ const placeholder = document.getElementById("placeholder");
109
+ placeholder.text = JSON.stringify(notebook, undefined, 4);
110
+ </script>
111
+ </hpcc-vitepress>
112
+ </ClientOnly>
113
+
package/src/util.ts ADDED
@@ -0,0 +1,154 @@
1
+ import type { ohq } from "@hpcc-js/observable-shim";
2
+ import { parseModule } from "@hpcc-js/observable-shim";
3
+
4
+ const FuncTypes = {
5
+ functionType: Object.getPrototypeOf(function () { }).constructor,
6
+ asyncFunctionType: Object.getPrototypeOf(async function () { }).constructor,
7
+ generatorFunctionType: Object.getPrototypeOf(function* () { }).constructor,
8
+ asyncGeneratorFunctionType: Object.getPrototypeOf(async function* () { }).constructor
9
+ };
10
+
11
+ function funcType(async: boolean = false, generator: boolean = false) {
12
+ if (!async && !generator) return FuncTypes.functionType;
13
+ if (async && !generator) return FuncTypes.asyncFunctionType;
14
+ if (!async && generator) return FuncTypes.generatorFunctionType;
15
+ return FuncTypes.asyncGeneratorFunctionType;
16
+ }
17
+
18
+ interface Ref {
19
+ start: number,
20
+ end: number,
21
+ newText: string
22
+ }
23
+
24
+ export interface Refs {
25
+ inputs: string[];
26
+ args: string[];
27
+ patches: Ref[];
28
+ }
29
+
30
+ export function createFunction(refs: Refs, async = false, generator = false, blockStatement = false, body?: string) {
31
+ if (body === undefined) {
32
+ return undefined;
33
+ }
34
+
35
+ refs.patches.sort((l, r) => r.start - l.start);
36
+ refs.patches.forEach(r => {
37
+ body = body!.substring(0, r.start) + r.newText + body!.substring(r.end);
38
+ });
39
+ return new (funcType(async, generator))(...refs.args, blockStatement ?
40
+ body.substring(1, body.length - 1).trim() :
41
+ `return (\n${body}\n);`);
42
+ }
43
+
44
+ // Hide "import" from bundlers as they have a habit of replacing "import" with "require"
45
+ export async function obfuscatedImport(url: string) {
46
+ return new FuncTypes.asyncFunctionType("url", "return import(url)")(url);
47
+ }
48
+
49
+ interface ParsedOJS {
50
+ ojs: string;
51
+ offset: number;
52
+ inlineMD: boolean;
53
+ }
54
+
55
+ export function encodeBacktick(str: string) {
56
+ return str
57
+ .split("`").join("\\`")
58
+ ;
59
+ }
60
+
61
+ function createParsedOJS(ojs: string, offset: number, inlineMD: boolean): ParsedOJS {
62
+ return {
63
+ ojs,
64
+ offset,
65
+ inlineMD
66
+ };
67
+ }
68
+
69
+ function parseOmd(_: string): ParsedOJS[] {
70
+ const retVal: ParsedOJS[] = [];
71
+ // Load Markdown ---
72
+ const re = /(```(?:\s|\S)[\s\S]*?```)/g;
73
+ let prevOffset = 0;
74
+ let match = re.exec(_);
75
+ while (match !== null) {
76
+ if (match.index > prevOffset) {
77
+ retVal.push(createParsedOJS(_.substring(prevOffset, match.index), prevOffset, true));
78
+ }
79
+
80
+ const outer = match[0];
81
+ if (outer.indexOf("``` ") === 0 || outer.indexOf("```\n") === 0 || outer.indexOf("```\r\n") === 0) {
82
+ const prefixLen = 3;
83
+ const inner = outer.substring(prefixLen, outer.length - prefixLen);
84
+ retVal.push(createParsedOJS(inner, match.index + prefixLen, false));
85
+ } else {
86
+ retVal.push(createParsedOJS(outer, match.index, true));
87
+ }
88
+
89
+ prevOffset = match.index + match[0].length;
90
+ match = re.exec(_);
91
+ }
92
+ if (_.length > prevOffset) {
93
+ retVal.push(createParsedOJS(_.substring(prevOffset, _.length), prevOffset, true));
94
+ }
95
+ return retVal;
96
+ }
97
+
98
+ export function notebook2ojs(_: string): ParsedOJS[] {
99
+ const parsed: ohq.Notebook = JSON.parse(_);
100
+ return parsed.nodes.map(node => createParsedOJS(node.value, 0, node.mode === "md"));
101
+ }
102
+
103
+ export function ojs2notebook(ojs: string): ohq.Notebook {
104
+ const cells = parseModule(ojs);
105
+ return {
106
+ files: [],
107
+ nodes: cells.map((cell, idx) => {
108
+ return {
109
+ id: idx,
110
+ mode: "js",
111
+ value: cell
112
+ };
113
+ })
114
+ } as ohq.Notebook;
115
+ }
116
+
117
+ export function omd2notebook(omd: string): ohq.Notebook {
118
+ const cells = parseOmd(omd);
119
+ return {
120
+ files: [],
121
+ nodes: cells.map((cell, idx) => {
122
+ return {
123
+ id: idx,
124
+ mode: cell.inlineMD ? "md" : "js",
125
+ value: cell.ojs
126
+ };
127
+ })
128
+ } as ohq.Notebook;
129
+ }
130
+
131
+ export function fetchEx(url: string) {
132
+ return fetch(url)
133
+ .then(response => {
134
+ if (response.ok) return response;
135
+ throw new Error("CORS?");
136
+ }).catch(e => {
137
+ const matches = url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img);
138
+ url = "https://observable-cors.glitch.me/" + url;
139
+ return fetch(url, {
140
+ headers: {
141
+ origin: matches[0],
142
+ referer: url
143
+ }
144
+ });
145
+ });
146
+ }
147
+
148
+ export function download(impUrl: string): Promise<ohq.Notebook> {
149
+ const isShared = impUrl.indexOf("https://observablehq.com/d") === 0;
150
+ return fetchEx(impUrl.replace(`https://observablehq.com/${isShared ? "d/" : ""}`, "https://api.observablehq.com/document/"))
151
+ .then(r => r.json())
152
+ ;
153
+
154
+ }
package/src/writer.ts ADDED
@@ -0,0 +1,80 @@
1
+ import { ohq } from "@hpcc-js/observable-shim";
2
+ import { ParsedImportCell, ParsedVariable } from "./cst";
3
+
4
+ export class Writer {
5
+
6
+ protected _files: ohq.File[] = [];
7
+ protected _imports: string[] = [];
8
+ protected _functions: string[] = [];
9
+ protected _defines: string[] = [];
10
+ protected _defineUid = 0;
11
+ protected _functionUid = 0;
12
+
13
+ constructor() {
14
+ }
15
+
16
+ toString() {
17
+ return `\
18
+ ${this._imports.join("\n")}
19
+
20
+ ${this._functions.join("\n").split("\n) {").join("){")}
21
+
22
+ export default function define(runtime, observer) {
23
+ const main = runtime.module();
24
+
25
+ function toString() { return this.url; }
26
+ const fileAttachments = new Map([
27
+ ${this._files.map(f => `["${f.name}", { url: new URL("${f.url}"), mimeType: ${JSON.stringify(f.mime_type)}, toString }]`).join(",\n ")}
28
+ ]);
29
+ main.builtin("FileAttachment", runtime.fileAttachments(name => fileAttachments.get(name)));
30
+
31
+ ${this._defines.join("\n ")}
32
+
33
+ return main;
34
+ }\n`;
35
+ }
36
+
37
+ files(files: ohq.File[]) {
38
+ this._files = [...this._files, ...files];
39
+ }
40
+
41
+ import(url: string) {
42
+ this._imports.push(`import define${++this._defineUid} from "${url}"; `);
43
+ }
44
+
45
+ importDefine(imp: Partial<ParsedImportCell>) {
46
+ const injections = imp.injections.map(inj => {
47
+ return inj.name === inj.alias ?
48
+ `"${inj.name}"` :
49
+ `{name: "${inj.name}", alias: "${inj.alias}"}`;
50
+ });
51
+ const derive = imp.injections.length ? `.derive([${injections.join(", ")}], main)` : "";
52
+ this._defines.push(`const child${this._defineUid} = runtime.module(define${this._defineUid})${derive};`);
53
+ imp.specifiers.forEach(s => {
54
+ this._defines.push(`main.import("${s.name}"${s.alias && s.alias !== s.name ? `, "${s.alias}"` : ""}, child${this._defineUid}); `);
55
+ });
56
+ }
57
+
58
+ function(variable: Partial<ParsedVariable>) {
59
+ let id = variable.id ?? `${++this._functionUid}`;
60
+ const idParts = id.split(" ");
61
+ id = `_${idParts[idParts.length - 1]}`;
62
+ this._functions.push(`${variable.func?.toString()?.replace("anonymous", `${id}`)}`);
63
+ return id;
64
+ }
65
+
66
+ define(variable: Partial<ParsedVariable>, observable = true, inlineFunc = false, funcId?: string) {
67
+ funcId = funcId ?? variable.id;
68
+ const observe = observable ? `.variable(observer(${variable.id ? JSON.stringify(variable.id) : ""}))` : "";
69
+ const id = variable.id ? `${JSON.stringify(variable.id)}, ` : "";
70
+ const inputs = variable.inputs.length ? `[${variable.inputs.map(i => JSON.stringify(i)).join(", ")}], ` : "";
71
+ const func = inlineFunc ?
72
+ variable.func?.toString() :
73
+ funcId;
74
+ this._defines.push(`main${observe}.define(${id}${inputs}${func});`);
75
+ }
76
+
77
+ error(msg: string) {
78
+ }
79
+ }
80
+
@@ -0,0 +1,4 @@
1
+ export declare const PKG_NAME = "@hpcc-js/observablehq-compiler";
2
+ export declare const PKG_VERSION = "1.1.0";
3
+ export declare const BUILD_VERSION = "2.104.5";
4
+ //# sourceMappingURL=__package__.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"__package__.d.ts","sourceRoot":"","sources":["../src/__package__.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,mCAAmC,CAAC;AACzD,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,aAAa,YAAY,CAAC"}
@@ -0,0 +1,110 @@
1
+ export declare const fa: {
2
+ id: string;
3
+ slug: string;
4
+ trashed: boolean;
5
+ description: string;
6
+ likes: number;
7
+ publish_level: string;
8
+ forks: number;
9
+ fork_of: any;
10
+ update_time: string;
11
+ publish_time: string;
12
+ publish_version: number;
13
+ latest_version: number;
14
+ thumbnail: string;
15
+ default_thumbnail: string;
16
+ roles: any[];
17
+ sharing: any;
18
+ owner: {
19
+ id: string;
20
+ avatar_url: string;
21
+ login: string;
22
+ name: string;
23
+ bio: string;
24
+ home_url: string;
25
+ type: string;
26
+ tier: string;
27
+ };
28
+ creator: {
29
+ id: string;
30
+ github_login: string;
31
+ avatar_url: string;
32
+ login: string;
33
+ name: string;
34
+ bio: string;
35
+ home_url: string;
36
+ tier: string;
37
+ };
38
+ authors: any[];
39
+ collections: {
40
+ id: string;
41
+ type: string;
42
+ slug: string;
43
+ title: string;
44
+ description: string;
45
+ update_time: string;
46
+ pinned: boolean;
47
+ ordered: boolean;
48
+ custom_thumbnail: string;
49
+ default_thumbnail: string;
50
+ thumbnail: string;
51
+ listing_count: number;
52
+ parent_collection_count: number;
53
+ owner: {
54
+ id: string;
55
+ avatar_url: string;
56
+ login: string;
57
+ name: string;
58
+ bio: string;
59
+ home_url: string;
60
+ type: string;
61
+ tier: string;
62
+ };
63
+ }[];
64
+ files: {
65
+ id: string;
66
+ url: string;
67
+ download_url: string;
68
+ name: string;
69
+ create_time: string;
70
+ status: string;
71
+ size: number;
72
+ mime_type: string;
73
+ content_encoding: string;
74
+ }[];
75
+ comments: {
76
+ id: string;
77
+ content: string;
78
+ node_id: number;
79
+ create_time: string;
80
+ update_time: any;
81
+ resolved: boolean;
82
+ user: {
83
+ id: string;
84
+ github_login: string;
85
+ avatar_url: string;
86
+ login: string;
87
+ name: string;
88
+ bio: string;
89
+ home_url: string;
90
+ tier: string;
91
+ };
92
+ }[];
93
+ commenting_lock: any;
94
+ suggestion_from: any;
95
+ suggestions_to: any[];
96
+ version: number;
97
+ title: string;
98
+ license: any;
99
+ copyright: string;
100
+ nodes: {
101
+ id: number;
102
+ value: string;
103
+ pinned: boolean;
104
+ mode: string;
105
+ data: any;
106
+ name: string;
107
+ }[];
108
+ resolutions: any[];
109
+ };
110
+ //# sourceMappingURL=File%20Attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File Attachments.d.ts","sourceRoot":"","sources":["../../src/__tests__/File Attachments.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA83Bd,CAAC"}
@@ -0,0 +1,120 @@
1
+ export declare const imports: {
2
+ id: string;
3
+ slug: string;
4
+ trashed: boolean;
5
+ description: string;
6
+ likes: number;
7
+ publish_level: string;
8
+ forks: number;
9
+ fork_of: any;
10
+ update_time: string;
11
+ publish_time: string;
12
+ publish_version: number;
13
+ latest_version: number;
14
+ thumbnail: string;
15
+ default_thumbnail: string;
16
+ roles: any[];
17
+ sharing: any;
18
+ owner: {
19
+ id: string;
20
+ avatar_url: string;
21
+ login: string;
22
+ name: string;
23
+ bio: string;
24
+ home_url: string;
25
+ type: string;
26
+ tier: string;
27
+ };
28
+ creator: {
29
+ id: string;
30
+ github_login: string;
31
+ avatar_url: string;
32
+ login: string;
33
+ name: string;
34
+ bio: string;
35
+ home_url: string;
36
+ tier: string;
37
+ };
38
+ authors: any[];
39
+ collections: {
40
+ id: string;
41
+ type: string;
42
+ slug: string;
43
+ title: string;
44
+ description: string;
45
+ update_time: string;
46
+ pinned: boolean;
47
+ ordered: boolean;
48
+ custom_thumbnail: string;
49
+ default_thumbnail: string;
50
+ thumbnail: string;
51
+ listing_count: number;
52
+ parent_collection_count: number;
53
+ owner: {
54
+ id: string;
55
+ avatar_url: string;
56
+ login: string;
57
+ name: string;
58
+ bio: string;
59
+ home_url: string;
60
+ type: string;
61
+ tier: string;
62
+ };
63
+ }[];
64
+ files: ({
65
+ id: string;
66
+ url: string;
67
+ download_url: string;
68
+ name: string;
69
+ create_time: string;
70
+ status: string;
71
+ size: number;
72
+ mime_type: any;
73
+ content_encoding: string;
74
+ } | {
75
+ id: string;
76
+ url: string;
77
+ download_url: string;
78
+ name: string;
79
+ create_time: string;
80
+ status: string;
81
+ size: number;
82
+ mime_type: string;
83
+ content_encoding: any;
84
+ })[];
85
+ comments: {
86
+ id: string;
87
+ content: string;
88
+ node_id: number;
89
+ create_time: string;
90
+ update_time: any;
91
+ resolved: boolean;
92
+ user: {
93
+ id: string;
94
+ github_login: string;
95
+ avatar_url: string;
96
+ login: string;
97
+ name: string;
98
+ bio: string;
99
+ home_url: string;
100
+ tier: string;
101
+ };
102
+ }[];
103
+ commenting_lock: any;
104
+ suggestion_from: any;
105
+ suggestions_to: any[];
106
+ version: number;
107
+ title: string;
108
+ license: any;
109
+ copyright: string;
110
+ nodes: {
111
+ id: number;
112
+ value: string;
113
+ pinned: boolean;
114
+ mode: string;
115
+ data: any;
116
+ name: string;
117
+ }[];
118
+ resolutions: any[];
119
+ };
120
+ //# sourceMappingURL=Introduction%20to%20Imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Introduction to Imports.d.ts","sourceRoot":"","sources":["../../src/__tests__/Introduction to Imports.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4uBnB,CAAC"}
@@ -0,0 +1,111 @@
1
+ export declare const timechart: {
2
+ id: string;
3
+ slug: string;
4
+ trashed: boolean;
5
+ description: string;
6
+ likes: number;
7
+ publish_level: string;
8
+ forks: number;
9
+ fork_of: any;
10
+ update_time: string;
11
+ publish_time: string;
12
+ publish_version: number;
13
+ latest_version: number;
14
+ thumbnail: string;
15
+ default_thumbnail: string;
16
+ roles: any[];
17
+ sharing: any;
18
+ owner: {
19
+ id: string;
20
+ avatar_url: string;
21
+ login: string;
22
+ name: string;
23
+ bio: string;
24
+ home_url: string;
25
+ type: string;
26
+ tier: string;
27
+ };
28
+ creator: {
29
+ id: string;
30
+ github_login: string;
31
+ avatar_url: string;
32
+ login: string;
33
+ name: string;
34
+ bio: string;
35
+ home_url: string;
36
+ tier: string;
37
+ };
38
+ authors: {
39
+ id: string;
40
+ avatar_url: string;
41
+ name: string;
42
+ login: string;
43
+ bio: string;
44
+ home_url: string;
45
+ github_login: string;
46
+ tier: string;
47
+ approved: boolean;
48
+ description: string;
49
+ }[];
50
+ collections: {
51
+ id: string;
52
+ type: string;
53
+ slug: string;
54
+ title: string;
55
+ description: string;
56
+ update_time: string;
57
+ pinned: boolean;
58
+ ordered: boolean;
59
+ custom_thumbnail: string;
60
+ default_thumbnail: string;
61
+ thumbnail: string;
62
+ listing_count: number;
63
+ parent_collection_count: number;
64
+ owner: {
65
+ id: string;
66
+ avatar_url: string;
67
+ login: string;
68
+ name: string;
69
+ bio: string;
70
+ home_url: string;
71
+ type: string;
72
+ tier: string;
73
+ };
74
+ }[];
75
+ files: any[];
76
+ comments: {
77
+ id: string;
78
+ content: string;
79
+ node_id: number;
80
+ create_time: string;
81
+ update_time: any;
82
+ resolved: boolean;
83
+ user: {
84
+ id: string;
85
+ github_login: string;
86
+ avatar_url: string;
87
+ login: string;
88
+ name: string;
89
+ bio: string;
90
+ home_url: string;
91
+ tier: string;
92
+ };
93
+ }[];
94
+ commenting_lock: any;
95
+ suggestion_from: any;
96
+ suggestions_to: any[];
97
+ version: number;
98
+ title: string;
99
+ license: string;
100
+ copyright: string;
101
+ nodes: {
102
+ id: number;
103
+ value: string;
104
+ pinned: boolean;
105
+ mode: string;
106
+ data: any;
107
+ name: any;
108
+ }[];
109
+ resolutions: any[];
110
+ };
111
+ //# sourceMappingURL=Observable%20TimeChart.d.ts.map