xcratch-create 0.3.0 → 0.5.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
@@ -9,10 +9,10 @@ This command supports to create a new code base of an extension for [Xcratch](ht
9
9
  npx xcratch-create --repo=xcx-my-extension --account=github-account --extensionID=myExtension --extensionName='My Extension'
10
10
  ```
11
11
 
12
- - --repo : Name of repository on GitHub
12
+ - --repo : Name of the repository on GitHub
13
13
  - --account : Account on GitHub
14
- - --extensionID : ID of the extension in Xcratch
15
- - --extensionName : Name of the extension in Xcratch
14
+ - --extensionID : ID of the extension in Scratch (allowed RegExp `/^[a-z0-9]+$/i`)
15
+ - --extensionName : Label string of the extension on the Editor in English
16
16
  - --version : Show version of this command
17
17
 
18
18
  ## 🤝 Contributing
package/bin/create.js CHANGED
@@ -5,6 +5,7 @@ const path = require('path');
5
5
  const replace = require('replace-in-file');
6
6
  const fs = require('fs-extra');
7
7
  const admZip = require('adm-zip');
8
+ const projectJson = require('../package.json');
8
9
 
9
10
  function getArgs() {
10
11
  const args = {};
@@ -32,7 +33,7 @@ function getArgs() {
32
33
  const args = getArgs();
33
34
 
34
35
  if (args['version'] || args['V']) {
35
- process.stdout.write(`v.${process.env.npm_package_version}\n`);
36
+ process.stdout.write(`v${projectJson.version}\n`);
36
37
  process.exit(0);
37
38
  }
38
39
 
@@ -78,6 +79,7 @@ const options = {
78
79
  'package.json',
79
80
  'src/**/*.js',
80
81
  'src/**/*.jsx',
82
+ 'src/**/*.json',
81
83
  'projects/example/project.json',
82
84
  ],
83
85
  from: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xcratch-create",
3
- "version": "0.3.0",
3
+ "version": "0.5.2",
4
4
  "description": "Support tool to create new extension for Xcratch",
5
5
  "bin": {
6
6
  "xcratch-create": "./bin/create.js"
@@ -39,15 +39,6 @@ Run build script to bundle this extension into a module file which could be load
39
39
  npm run build
40
40
  ```
41
41
 
42
- ### Linting
43
-
44
- Install Scratch eslint-config to coding.
45
-
46
- ```sh
47
- npm install
48
- ```
49
-
50
-
51
42
  ## 🏠 Home Page
52
43
 
53
44
  Open this page from [https://<<account>>.github.io/<<repo>>/](https://<<account>>.github.io/<<repo>>/)
@@ -1 +1,3 @@
1
1
  /node_modules
2
+ /src/vm/extension-support
3
+ /src/vm/util
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "<<repo>>",
3
3
  "version": "0.0.0",
4
- "private": "true",
5
4
  "scripts": {
6
- "register": "npx xcratch-register --link -C --id=<<extensionID>> --gui=\"../scratch-gui\"",
7
- "build": "npx xcratch-build --module=<<extensionID>> --gui=\"../scratch-gui\""
5
+ "register": "npx xcratch-register --link -C --id=<<extensionID>> --gui=\"../scratch-gui\" --block=\"./src/vm/extensions/block\" --entry\"./src/gui/lib/libraries/extensions/entry\"",
6
+ "build": "npx xcratch-build --module=<<extensionID>> --gui=\"../scratch-gui\" --block=\"./src/vm/extensions/block\" --entry\"./src/gui/lib/libraries/extensions/entry\""
8
7
  },
9
8
  "devDependencies": {
10
- "eslint-config-scratch": "^7.0.0"
9
+ "xcratch-build": "^0.3.0",
10
+ "xcratch-register": "^0.3.1"
11
11
  }
12
12
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
  import iconURL from './entry-icon.png';
6
6
  import insetIconURL from './inset-icon.svg';
7
+ import translations from './translations.json';
7
8
 
8
9
  /**
9
10
  * Formatter to translate the messages in this extension.
@@ -13,17 +14,14 @@ import insetIconURL from './inset-icon.svg';
13
14
  */
14
15
  let formatMessage = messageData => messageData.defaultMessage;
15
16
 
16
- const translationMap = {
17
- 'ja': {
18
- 'gui.extension.<<extensionID>>.description': 'Xcratch 拡張の例'
19
- },
20
- 'ja-Hira': {
21
- 'gui.extension.<<extensionID>>.description': 'Xcratch (えくすくらっち)かくちょうのれい'
22
- }
23
- };
24
-
25
17
  const entry = {
26
- name: '<<extensionName>>',
18
+ get name () {
19
+ return formatMessage({
20
+ id: '<<extensionID>>.entry.name',
21
+ default: '<<extensionName>>',
22
+ description: 'name of the extension'
23
+ });
24
+ },
27
25
  extensionId: '<<extensionID>>',
28
26
  extensionURL: 'https://<<account>>.github.io/<<repo>>/dist/<<extensionID>>.mjs',
29
27
  collaborator: '<<account>>',
@@ -33,7 +31,7 @@ const entry = {
33
31
  return formatMessage({
34
32
  defaultMessage: 'an extension for Xcratch',
35
33
  description: 'Description for this extension',
36
- id: 'gui.extension.<<extensionID>>.description'
34
+ id: '<<extensionID>>.entry.description'
37
35
  });
38
36
  },
39
37
  featured: true,
@@ -44,7 +42,7 @@ const entry = {
44
42
  setFormatMessage: formatter => {
45
43
  formatMessage = formatter;
46
44
  },
47
- translationMap: translationMap
45
+ translationMap: translations
48
46
  };
49
47
 
50
48
  export {entry}; // loadable-extension needs this line.
@@ -0,0 +1,14 @@
1
+ {
2
+ "en": {
3
+ "<<extensionID>>.entry.name": "<<extensionName>>",
4
+ "<<extensionID>>.entry.description": "Description of this extension"
5
+ },
6
+ "ja": {
7
+ "<<extensionID>>.entry.name": "<<extensionName>>",
8
+ "<<extensionID>>.entry.description": "拡張機能の説明"
9
+ },
10
+ "ja-Hira": {
11
+ "<<extensionID>>.entry.name": "<<extensionName>>",
12
+ "<<extensionID>>.entry.description": "かくちょうきのうのせつめい"
13
+ }
14
+ }
@@ -0,0 +1,140 @@
1
+ import BlockType from '../../extension-support/block-type';
2
+ import ArgumentType from '../../extension-support/argument-type';
3
+ import Cast from '../../util/cast';
4
+ import translations from './translations.json';
5
+ import blockIcon from './block-icon.png';
6
+
7
+ /**
8
+ * Formatter which is used for translation.
9
+ * This will be replaced which is used in the runtime.
10
+ * @param {object} messageData - format-message object
11
+ * @returns {string} - message for the locale
12
+ */
13
+ let formatMessage = messageData => messageData.defaultMessage;
14
+
15
+ /**
16
+ * Setup format-message for this extension.
17
+ */
18
+ const setupTranslations = () => {
19
+ const localeSetup = formatMessage.setup();
20
+ if (localeSetup && localeSetup.translations[localeSetup.locale]) {
21
+ Object.assign(
22
+ localeSetup.translations[localeSetup.locale],
23
+ translations[localeSetup.locale]
24
+ );
25
+ }
26
+ };
27
+
28
+ const EXTENSION_ID = '<<extensionID>>';
29
+
30
+ /**
31
+ * URL to get this extension as a module.
32
+ * When it was loaded as a module, 'extensionURL' will be replaced a URL which is retrieved from.
33
+ * @type {string}
34
+ */
35
+ let extensionURL = 'https://<<account>>.github.io/<<repo>>/dist/<<extensionID>>.mjs';
36
+
37
+ /**
38
+ * Scratch 3.0 blocks for example of Xcratch.
39
+ */
40
+ class ExtensionBlocks {
41
+
42
+ /**
43
+ * @return {string} - the name of this extension.
44
+ */
45
+ static get EXTENSION_NAME () {
46
+ return formatMessage({
47
+ id: '<<extensionID>>.name',
48
+ default: '<<extensionName>>',
49
+ description: 'name of the extension'
50
+ });
51
+ }
52
+
53
+ /**
54
+ * @return {string} - the ID of this extension.
55
+ */
56
+ static get EXTENSION_ID () {
57
+ return EXTENSION_ID;
58
+ }
59
+
60
+ /**
61
+ * URL to get this extension.
62
+ * @type {string}
63
+ */
64
+ static get extensionURL () {
65
+ return extensionURL;
66
+ }
67
+
68
+ /**
69
+ * Set URL to get this extension.
70
+ * The extensionURL will be changed to the URL of the loading server.
71
+ * @param {string} url - URL
72
+ */
73
+ static set extensionURL (url) {
74
+ extensionURL = url;
75
+ }
76
+
77
+ /**
78
+ * Construct a set of blocks for <<extensionName>>.
79
+ * @param {Runtime} runtime - the Scratch 3.0 runtime.
80
+ */
81
+ constructor (runtime) {
82
+ /**
83
+ * The Scratch 3.0 runtime.
84
+ * @type {Runtime}
85
+ */
86
+ this.runtime = runtime;
87
+
88
+ if (runtime.formatMessage) {
89
+ // Replace 'formatMessage' to a formatter which is used in the runtime.
90
+ formatMessage = runtime.formatMessage;
91
+ }
92
+ }
93
+
94
+ doIt (args) {
95
+ const func = new Function(`return (${Cast.toString(args.SCRIPT)})`);
96
+ const result = func.call(this);
97
+ console.log(result);
98
+ return result;
99
+ }
100
+
101
+ /**
102
+ * @returns {object} metadata for this extension and its blocks.
103
+ */
104
+ getInfo () {
105
+ setupTranslations();
106
+ return {
107
+ id: ExtensionBlocks.EXTENSION_ID,
108
+ name: ExtensionBlocks.EXTENSION_NAME,
109
+ extensionURL: ExtensionBlocks.extensionURL,
110
+ blockIconURI: blockIcon,
111
+ showStatusButton: false,
112
+ blocks: [
113
+ {
114
+ opcode: 'do-it',
115
+ blockType: BlockType.REPORTER,
116
+ blockAllThreads: false,
117
+ text: formatMessage({
118
+ id: '<<extensionID>>.doIt',
119
+ default: 'do it [SCRIPT]',
120
+ description: 'execute javascript for example'
121
+ }),
122
+ func: 'doIt',
123
+ arguments: {
124
+ SCRIPT: {
125
+ type: ArgumentType.STRING,
126
+ defaultValue: '3 + 4'
127
+ }
128
+ }
129
+ }
130
+ ],
131
+ menus: {
132
+ }
133
+ };
134
+ }
135
+ }
136
+
137
+ export {
138
+ ExtensionBlocks as default,
139
+ ExtensionBlocks as blockClass
140
+ };
@@ -0,0 +1,14 @@
1
+ {
2
+ "en": {
3
+ "<<extensionID>>.name": "<<extensionName>>",
4
+ "<<extensionID>>.doIt": "do it [SCRIPT]"
5
+ },
6
+ "ja": {
7
+ "<<extensionID>>.name": "<<extensionName>>",
8
+ "<<extensionID>>.doIt": "[SCRIPT] を実行する"
9
+ },
10
+ "ja-Hira": {
11
+ "<<extensionID>>.name": "<<extensionName>>",
12
+ "<<extensionID>>.doIt": "[SCRIPT] をじっこうする"
13
+ }
14
+ }
@@ -1,22 +0,0 @@
1
- module.exports = {
2
- root: true,
3
- extends: ['scratch', 'scratch/node', 'scratch/es6', 'scratch/react'],
4
- env: {
5
- browser: true,
6
- worker: true
7
- },
8
- globals: {
9
- process: true,
10
- Scratch: true
11
- },
12
- rules: {
13
- 'no-confusing-arrow': ['error', {
14
- allowParens: true
15
- }]
16
- },
17
- settings: {
18
- react: {
19
- version: '16.2' // Prevent 16.3 lifecycle method errors
20
- }
21
- }
22
- };
@@ -1,150 +0,0 @@
1
- const BlockType = require('../../extension-support/block-type');
2
- const ArgumentType = require('../../extension-support/argument-type');
3
- // const cast = require('../../util/cast');
4
- // const log = require('../../util/log');
5
-
6
- /**
7
- * Formatter which is used for translation.
8
- * This will be replaced which is used in the runtime.
9
- * @param {*} messageData - format-message object
10
- * @returns {string} - message for the locale
11
- */
12
- let formatMessage = messageData => messageData.defaultMessage;
13
-
14
- const EXTENSION_ID = '<<extensionID>>';
15
-
16
- /**
17
- * URL to get this extension as a module.
18
- * When it was loaded as a module, 'extensionURL' will be replaced a URL which is retrieved from.
19
- * @type {string}
20
- */
21
- let extensionURL = 'https://<<account>>.github.io/<<repo>>/dist/<<extensionID>>.mjs';
22
-
23
- /**
24
- * Icon png to be displayed at the left edge of each extension block, encoded as a data URI.
25
- * @type {string}
26
- */
27
- // eslint-disable-next-line max-len
28
- const blockIconURI = 'data:image/png;base64,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';
29
-
30
- /**
31
- * Scratch 3.0 blocks for example of Xcratch.
32
- */
33
- class ExtensionBlocks {
34
-
35
- /**
36
- * @return {string} - the name of this extension.
37
- */
38
- static get EXTENSION_NAME () {
39
- return '<<extensionName>>';
40
- }
41
-
42
- /**
43
- * @return {string} - the ID of this extension.
44
- */
45
- static get EXTENSION_ID () {
46
- return EXTENSION_ID;
47
- }
48
-
49
- /**
50
- * URL to get this extension.
51
- * @type {string}
52
- */
53
- static get extensionURL () {
54
- return extensionURL;
55
- }
56
-
57
- /**
58
- * Set URL to get this extension.
59
- * extensionURL will be reset when the module is loaded from the web.
60
- * @param {string} url - URL
61
- */
62
- static set extensionURL (url) {
63
- extensionURL = url;
64
- }
65
-
66
- /**
67
- * Construct a set of blocks for <<extensionName>>.
68
- * @param {Runtime} runtime - the Scratch 3.0 runtime.
69
- */
70
- constructor (runtime) {
71
- /**
72
- * The Scratch 3.0 runtime.
73
- * @type {Runtime}
74
- */
75
- this.runtime = runtime;
76
-
77
- if (runtime.formatMessage) {
78
- // Replace 'formatMessage' to a formatter which is used in the runtime.
79
- formatMessage = runtime.formatMessage;
80
- }
81
- }
82
-
83
- /**
84
- * @returns {object} metadata for this extension and its blocks.
85
- */
86
- getInfo () {
87
- this.setupTranslations();
88
- return {
89
- id: ExtensionBlocks.EXTENSION_ID,
90
- name: ExtensionBlocks.EXTENSION_NAME,
91
- extensionURL: ExtensionBlocks.extensionURL,
92
- blockIconURI: blockIconURI,
93
- showStatusButton: false,
94
- blocks: [
95
- {
96
- opcode: 'do-it',
97
- blockType: BlockType.REPORTER,
98
- blockAllThreads: false,
99
- text: formatMessage({
100
- id: '<<extensionID>>.doIt',
101
- default: 'do it [SCRIPT]',
102
- description: 'execute javascript for example'
103
- }),
104
- func: 'doIt',
105
- arguments: {
106
- SCRIPT: {
107
- type: ArgumentType.STRING,
108
- defaultValue: '3 + 4'
109
- }
110
- }
111
- }
112
- ],
113
- menus: {
114
- },
115
- // eslint-disable-next-line no-use-before-define
116
- translationMap: extensionTranslations
117
- };
118
- }
119
-
120
- doIt (args) {
121
- const func = new Function(`return (${args.SCRIPT})`);
122
- return func.call(this);
123
- }
124
-
125
-
126
- /**
127
- * Setup format-message for this extension.
128
- */
129
- setupTranslations () {
130
- const localeSetup = formatMessage.setup();
131
- if (localeSetup && localeSetup.translations[localeSetup.locale]) {
132
- Object.assign(
133
- localeSetup.translations[localeSetup.locale],
134
- // eslint-disable-next-line no-use-before-define
135
- extensionTranslations[localeSetup.locale]
136
- );
137
- }
138
- }
139
- }
140
-
141
- const extensionTranslations = {
142
- 'ja': {
143
- '<<extensionID>>.doIt': '[SCRIPT] を実行する'
144
- },
145
- 'ja-Hira': {
146
- '<<extensionID>>.doIt': '[SCRIPT] をじっこうする'
147
- }
148
- };
149
-
150
- module.exports = ExtensionBlocks;