motoko 0.1.4 → 0.1.5

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.
@@ -0,0 +1,122 @@
1
+ // Highlight.js configuration
2
+
3
+ export const configure = (hljs) => {
4
+ var string = {
5
+ className: 'string',
6
+ variants: [
7
+ {
8
+ begin: /r(#*)"(.|\n)*?"\1(?!#)/,
9
+ },
10
+ {
11
+ begin: /b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/,
12
+ },
13
+ ],
14
+ };
15
+ var number = {
16
+ className: 'number',
17
+ variants: [
18
+ {
19
+ begin: '[+-]?\\b0[xX]([A-Fa-f0-9_]+)',
20
+ },
21
+ {
22
+ begin: '[+-]?\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)',
23
+ },
24
+ ],
25
+ relevance: 0,
26
+ };
27
+ hljs.registerLanguage('motoko', function (hljs) {
28
+ return {
29
+ name: 'Motoko',
30
+ aliases: ['mo'],
31
+ keywords: {
32
+ $pattern: '[a-zA-Z_]\\w*',
33
+ keyword:
34
+ 'actor and await break case catch class' +
35
+ ' continue debug do else for func if in import' +
36
+ ' module not object or label let loop private' +
37
+ ' public return shared try throw query switch' +
38
+ ' type var while stable flexible system debug_show assert ignore from_candid to_candid',
39
+ literal: 'true false null',
40
+ built_in:
41
+ 'Any None Null Bool Int Int8 Int16 Int32 Int64' +
42
+ ' Nat Nat8 Nat16 Nat32 Nat64 Word8 Word16 Word32 Word64' +
43
+ ' Float Char Text Blob Error Principal' +
44
+ ' async',
45
+ },
46
+ illegal: '</',
47
+ contains: [
48
+ hljs.C_LINE_COMMENT_MODE,
49
+ hljs.COMMENT('/\\*', '\\*/', {
50
+ contains: ['self'],
51
+ }),
52
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {
53
+ begin: /b?"/,
54
+ illegal: null,
55
+ }),
56
+ string,
57
+ number,
58
+ {
59
+ className: 'symbol',
60
+ begin: '#' + hljs.UNDERSCORE_IDENT_RE,
61
+ },
62
+ {
63
+ className: 'function',
64
+ beginKeywords: 'func',
65
+ end: '(\\(|<|=|{)',
66
+ excludeEnd: true,
67
+ contains: [hljs.UNDERSCORE_TITLE_MODE],
68
+ },
69
+ {
70
+ className: 'class',
71
+ begin: '\\b(actor( class)?|module|object)\\b',
72
+ keywords: 'actor class module object',
73
+ end: '(\\(|<|{)',
74
+ contains: [hljs.UNDERSCORE_TITLE_MODE],
75
+ illegal: '[\\w\\d]',
76
+ },
77
+ {
78
+ className: 'built_in',
79
+ beginKeywords: 'import type',
80
+ end: '(;|$|=)',
81
+ excludeEnd: true,
82
+ contains: [
83
+ hljs.QUOTE_STRING_MODE,
84
+ hljs.C_LINE_COMMENT_MODE,
85
+ hljs.COMMENT('/\\*', '\\*/', {
86
+ contains: ['self'],
87
+ }),
88
+ ],
89
+ },
90
+ ],
91
+ };
92
+ });
93
+ hljs.registerLanguage('candid', function (hljs) {
94
+ return {
95
+ name: 'Candid',
96
+ aliases: ['did'],
97
+ keywords: {
98
+ $pattern: '[a-zA-Z_]\\w*',
99
+ keyword: 'import service type',
100
+ built_in:
101
+ 'opt vec record variant func blob principal' +
102
+ ' nat nat8 nat16 nat32 nat64 int int8 int16 int32 int64' +
103
+ ' float32 float64 bool text null reserved empty' +
104
+ ' oneway query',
105
+ },
106
+ illegal: '</',
107
+ contains: [
108
+ hljs.C_LINE_COMMENT_MODE,
109
+ hljs.COMMENT('/\\*', '\\*/', {
110
+ contains: ['self'],
111
+ }),
112
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {
113
+ begin: /b?"/,
114
+ illegal: null,
115
+ }),
116
+ string,
117
+ number,
118
+ ],
119
+ };
120
+ });
121
+ }
122
+
package/lib/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  const debug = require('debug')('motoko');
4
4
 
5
5
  const { Motoko } = require('./generated/moc');
6
- const { loadPackages } = require('./package');
6
+ const { /* resolvePackage, */ loadPackages } = require('./package');
7
7
 
8
8
  const invoke = (key, unwrap, args) => {
9
9
  if (typeof Motoko[key] !== 'function') {
@@ -37,8 +37,12 @@ const invoke = (key, unwrap, args) => {
37
37
 
38
38
  module.exports = {
39
39
  Motoko,
40
+ // resolvePackage,
40
41
  loadPackages,
41
- addFile(file, content) {
42
+ addFile(file, content = '') {
43
+ if (typeof content !== 'string') {
44
+ throw new Error('Non-string file content');
45
+ }
42
46
  debug('+file', file);
43
47
  invoke('saveFile', false, [file, content]);
44
48
  },
@@ -58,7 +62,11 @@ module.exports = {
58
62
  invoke('clearPackage', false, []);
59
63
  },
60
64
  check(file) {
61
- invoke('check', true, [file]);
65
+ const result = invoke('check', false, [file]);
66
+ return result.diagnostics;
67
+ },
68
+ run(file, libFiles) {
69
+ return invoke('run', false, [libFiles || [], file]);
62
70
  },
63
71
  candid(file) {
64
72
  return invoke('candid', true, [file]);
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const mo = require('.');
4
+
5
+ const actor = `
6
+ actor Main {
7
+ public func test() : async Nat {
8
+ 123
9
+ }
10
+ }
11
+ `;
12
+
13
+ describe('check', () => {
14
+ test('works for a basic example', () => {
15
+ const file = 'test__check__.mo';
16
+ mo.addFile(file, actor);
17
+ expect(mo.check(file)).toStrictEqual([]);
18
+ });
19
+ });
20
+
21
+ describe('run', () => {
22
+ test('works for a basic example', () => {
23
+ const file = 'test__run__.mo';
24
+ mo.addFile(file, 'let x = 1 + 1; x');
25
+ expect(mo.run(file)).toStrictEqual({
26
+ result: 0,
27
+ stdout: '2 : Nat\n',
28
+ stderr: '',
29
+ });
30
+ });
31
+ });
package/lib/package.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  // Derived from: https://github.com/dfinity/motoko-playground/blob/main/src/workers/file.ts
3
3
 
4
- const parse = require('parse-github-url');
4
+ const parse = require('isomorphic-parse-github-url');
5
5
  const fetch = require('cross-fetch');
6
6
 
7
7
  async function fetchPackage(mo, info) {
@@ -38,12 +38,12 @@ async function fetchGithub(mo, repo, directory = '') {
38
38
  return await fetchFromGithub(mo, repo, directory);
39
39
  }
40
40
 
41
- function saveWorkplaceToMotoko(mo, files) {
42
- for (const [name, code] of Object.entries(files)) {
43
- if (!name.endsWith('mo')) continue;
44
- mo.addFile(name, code);
45
- }
46
- }
41
+ // function saveWorkplaceToMotoko(mo, files) {
42
+ // for (const [name, code] of Object.entries(files)) {
43
+ // if (!name.endsWith('mo')) continue;
44
+ // mo.addFile(name, code);
45
+ // }
46
+ // }
47
47
 
48
48
  async function fetchFromCDN(mo, repo, directory = '') {
49
49
  const meta_url = `https://data.jsdelivr.com/v1/package/gh/${repo.repo}@${repo.branch}/flat`;
@@ -114,6 +114,10 @@ async function fetchFromGithub(mo, repo, directory = '') {
114
114
  });
115
115
  }
116
116
 
117
+ // async function resolve(path) {
118
+
119
+ // }
120
+
117
121
  function parseGithubPackage(path, name) {
118
122
  if (!path) {
119
123
  return;
@@ -137,7 +141,6 @@ function parseGithubPackage(path, name) {
137
141
 
138
142
  return {
139
143
  name: name || repoName,
140
- // repo,
141
144
  repo: `https://github.com/${owner}/${repoName}.git`,
142
145
  version: branch,
143
146
  dir: filepath,
@@ -146,6 +149,12 @@ function parseGithubPackage(path, name) {
146
149
  }
147
150
 
148
151
  module.exports = {
152
+ // async resolvePackage(package) {
153
+ // if (typeof package === 'string') {
154
+ // return resolve(package);
155
+ // }
156
+ // return package;
157
+ // },
149
158
  async loadPackages(packages) {
150
159
  for (const [name, path] of Object.entries(packages)) {
151
160
  const mo = require('.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "motoko",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Compile Motoko smart contracts in Node.js and the browser.",
5
5
  "author": "Ryan Vandersmith (https://github.com/rvanasa)",
6
6
  "license": "Apache-2.0",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "cross-fetch": "3.1.5",
14
- "parse-github-url": "1.0.2"
14
+ "isomorphic-parse-github-url": "1.0.2"
15
15
  },
16
16
  "devDependencies": {
17
17
  "cross-env": "^7.0.3",
package/lib/index.test.js DELETED
@@ -1,17 +0,0 @@
1
- 'use strict'
2
-
3
- const Motoko = require('.');
4
-
5
- const actorMo = `
6
- actor Main {
7
- public func test() : async Nat {
8
- 123
9
- }
10
- }
11
- `;
12
-
13
- test('placeholder', () => {
14
- expect(true).toEqual(true); // placeholder
15
-
16
- console.log(Motoko.parse(actorMo));
17
- });