alps-asd / app-state-diagram Goto Github PK
View Code? Open in Web Editor NEWReads ALPS documents and produces a full state diagram and hyperlinked documentation.
Home Page: https://alps-asd.github.io/
License: MIT License
Reads ALPS documents and produces a full state diagram and hyperlinked documentation.
Home Page: https://alps-asd.github.io/
License: MIT License
Empty profile causes raise InvalidAlpsException
.
<?xml version="1.0" encoding="UTF-8"?>
<alps
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://alps-io.github.io/schemas/alps.xsd">
</alps>
> bin/asd -c docs/blog/asd.md.xml docs/blog/profile.xml
InvalidAlpsException: /Users/akihito/git/app-state-diagram/docs/blog/profile.xml
in /Users/akihito/git/app-state-diagram/src/SplitProfile.php:58
Script bin/asd -c docs/blog/asd.md.xml docs/blog/profile.xml handling the md event returned with error code 1
Dockerをasdのwatchモードで動かすサンプルをREADMEに追加
No timeout in watch mode, which currently times out in 300 seconds.
The following exception is caused by a process timeout
Check https://getcomposer.org/doc/06-config.md#process-timeout for details
In Process.php line 1204:
The process "asd '--watch' '/work/demo.xml'" exceeded the timeout of 300 se
conds.
exec [-l|--list] [--] [<binary> [<args>...]]
これはgulpではなくcomposer?
when generating documentation from the ALPS file, the html.head.title
property is always set to ALPS
.
it would be better to set the html.head.title
property to the alps.title
property.
現在はステートダイアグラムのレンダリングがIDで行われ、label
オプションで指定できる様になっていますがオプションを廃止して3つ(id, title, both) の全て一度にレンダリングされるようにする。
Currently, state diagrams are rendered by ID, which can be specified with the label
option, but this option should be removed so that all three (id, title, both) are rendered at once.
Current
Proposal
along with rendering the root TITLE on the index page, also render any root level DOC.VALUE elements the index page just under the title and before the list of ALPS, diagram, etc.
Currently, if you run it without any options
$ asd
Config file not found:
これは寂しい。
It should be as followings.
asd version 0.9.0
Usage:
asd [options] [alpsFile]
Options:
-c, --config=asd.xml
Path to a asd.xml configuration file
-w, --watch
Watch mode
--and-tag={tag1, tag2} --or-tag={tag3} [--color=red]
Filter graph
-l, --label={id|title|both}
Displayed words
-m, --mode={markdown|html}
Output format
it would be nice to see the document.title
listed in the properties or a descriptor in the HTML documentation (the same as the descriptor.doc.value
is listed now).
the ability to use full URIs for HREF values exhibit unexpected results.
assume this sample ALPS document:
{
"alps" : {
"version" : "1.0",
"title" : "Testing External References",
"descriptor" : [
{"href": "https://rwmbook.github.io/alps-documents/related/related.json#home"}
]
}
}
now...
Note the title
from the source document is replaced by the title
in the reference document.
{
"alps" : {
"version" : "1.0",
"title" : "Testing External References",
"descriptor" : [
{"href": "https://rwmbook.github.io/alps-documents/related/related.json#home"},
{"href": "https://rwmbook.github.io/alps-documents/mru/mru.json#home"}
]
}
}
now the results seems to be a merge of the two. but there are inconsistencies.
title
of the second external reference.home
semantic element.home
semantic element (a resource expression) shown here is the one from the second reference in the source document. However, it is missing a sub descriptor (relatedLink
) even though there is one in the home
descriptor of the second reference. It looks like there are overwrites here which should be merges?{
"alps" : {
"version" : "1.0",
"title" : "Testing External References",
"descriptor" : [
{"href": "https://rwmbook.github.io/alps-documents/mru/mru.json#home"},
{"href": "https://rwmbook.github.io/alps-documents/related/related.json#home"}
]
}
}
now the results show that the second external reference has overwritten (not merged) matching element from the first.
I expected any "clashes" of descriptors to result in a faithful combining of the two (or more) elements. I also expected the title
to be that of the source document (not the last reference).
I think i am OK with the general results (the merging of the two documents as long as it is done faithfully. it has implications for creating smaller ALPS documents and then using a "parent" document to combine them easily. that could be handy.
従来の tag による filter は 指定したtagを持った遷移のみを抽出
します。
<?xml version="1.0" encoding="UTF-8"?>
<alps
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://alps-io.github.io/schemas/alps.xsd">
<descriptor id="nav">
<descriptor href="#goHome" />
</descriptor>
<!-- embedded navigation -->
<descriptor id="PageA">
<descriptor href="#nav" />
<descriptor href="#goPageB" />
</descriptor>
<!-- tagged navigation -->
<descriptor id="PageB">
<descriptor href="#goHome"/>
<descriptor href="#goPageA" />
</descriptor>
<descriptor id="Home">
<descriptor href="#goPageA" />
<descriptor href="#goPageB" />
</descriptor>
<descriptor id="goHome" type="safe" rt="#Home" tag="nav" />
<descriptor id="goPageA" type="safe" rt="#PageA" />
<descriptor id="goPageB" type="safe" rt="#PageB" />
</alps>
上記の Profile に対して asd --and-tag=nav profile.xml
すると以下のdotが生成されます。
digraph application_state_diagram {
graph [
labelloc="t";
fontname="Helvetica"
label="";
URL="index.html" target="_parent"
];
node [shape = box, style = "bold,filled" fillcolor="lightgray"];
PageB -> Home [label = <goHome (safe)> URL="docs/safe.goHome.html" target="_parent" fontsize=13];
nav -> Home [label = <goHome (safe)> URL="docs/safe.goHome.html" target="_parent" fontsize=13];
PageB [label = <PageB> URL="docs/semantic.PageB.html" target="_parent"]
Home [label = <Home> URL="docs/semantic.Home.html" target="_parent"]
nav [label = <nav> URL="docs/semantic.nav.html" target="_parent"]
}
新たに サポートする機能は、上記の逆の処理を行い、次のdotを出力します。
digraph application_state_diagram {
graph [
labelloc="t";
fontname="Helvetica"
label="";
URL="index.html" target="_parent"
];
node [shape = box, style = "bold,filled" fillcolor="lightgray"];
PageA [margin=0.02, label=<<table cellspacing="0" cellpadding="5" border="0"><tr><td>PageA<br />(nav)<br /></td></tr></table>>,shape=box URL="docs/semantic.PageA.html" target="_parent"]
Home -> PageA [label = <goPageA (safe)> URL="docs/safe.goPageA.html" target="_parent" fontsize=13];
Home -> PageB [label = <goPageB (safe)> URL="docs/safe.goPageB.html" target="_parent" fontsize=13];
PageA -> PageB [label = <goPageB (safe)> URL="docs/safe.goPageB.html" target="_parent" fontsize=13];
PageB -> PageA [label = <goPageA (safe)> URL="docs/safe.goPageA.html" target="_parent" fontsize=13];
Home [label = <Home> URL="docs/semantic.Home.html" target="_parent"]
PageB [label = <PageB> URL="docs/semantic.PageB.html" target="_parent"]
}
after running the update/install for later version i see:
given the following XML profile:
https://raw.githack.com/alps-io/profiles/master/xml/to-do.xml
when i run the ASD tool i get the following response:
Parse error on line 1:
<alps version="1.0">
^
Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
in /home/mca/.config/composer/vendor/koriym/app-state-diagram/src/JsonDecode.php:55
#163 の変更でdocker pullの実行結果出ていますが、これを表示しないように変更。
asd ./work/profile.json
latest: Pulling from alps-asd/app-state-diagram
Digest: sha256:f75fd9a4f6742842aadb0122302dce25c50b3d1126fcc31f3ec546a6f349b64c
Status: Image is up to date for ghcr.io/alps-asd/app-state-diagram:latest
ghcr.io/alps-asd/app-state-diagram:latest
Changed current directory to /root/.composer
ASD generated. /work/index.html
Descriptors(12), Links(6)
A proper error message will encourage the user to write the correct ALPS file.
Item list should be checked and output proper error message.
condition
$ pwd
/Users/tsuchiya/work/tsuchiya/alps-asd/app-state-diagram
$ which asd
/usr/local/bin/asd
result
$ bin/asd --watch docs/blog/profile.xml
> [email protected] start
> gulp "--profile" "/Users/tsuchiya/work/tsuchiya/alps-asd/app-state-diagram/docs/blog/profile.xml"
[21:40:40] Using gulpfile ~/work/tsuchiya/alps-asd/app-state-diagram/asd-sync/gulpfile.js
[21:40:40] Starting 'default'...
[21:40:40] Starting 'asd'...
the input device is not a TTY
Command failed: asd /Users/tsuchiya/work/tsuchiya/alps-asd/app-state-diagram/docs/blog/profile.xml
the input device is not a TTY
[21:40:41] Finished 'asd' after 447 ms
[21:40:41] Starting 'serve'...
[21:40:41] Starting 'watch'...
[21:40:41] Finished 'serve' after 48 ms
[Browsersync] Access URLs:
-------------------------------------
Local: http://localhost:3000
External: http://192.168.11.5:3000
-------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
-------------------------------------
[Browsersync] Serving files from: /Users/tsuchiya/work/tsuchiya/alps-asd/app-state-diagram/docs/blog
A private repository can not use GitHub Pages
before:
Syntax Error
after:
" does not contain valid JSON
Parse error on line 8:
... ]}, {"id": 'Foo'} ] }}
---------------------^
Invalid string, it appears you used single quotes instead of double quotes
Powered by https://github.com/Seldaek/jsonlint
assertだとユーザーは何の例外か全然分からず、開発者のデバックも困難です。
very much like the rendering of tag
values on the home page of the ALPS profile documentation.
would also like to see the typical navigation footer appear at the bottom of these pages to maket it easier to naivgate between tag pages and other pages in the documentation.
please consider adding:
home > asd > {tag}
as the footer for all tag pages.
I would like to be able to move the title of the document from the bottom of the rendered diagram to the top.
it would be great to be able to render the TITLE element (at the root of ALPS) on the output HTML and diagram.
also, maybe include the root level DOC.VALUE element on the HTML output?
thanks for a great tool. enjoying it very much.
The package doesn't include the node module, and it gets installed every time it is started up.
How to run docker container currently.
docker run -v "$(pwd)/work:/asd" -dit --init --rm --name asd ghcr.io/koriym/app-state-diagram:latest composer --quiet global exec asd /asd/profile.json
This is redundant. It should be changed as follows.
asd work/profile.json
bin/asd --config=docs/blog/asd_md.xml
Profile file not found
It would be great if we have a decent step-to-step tutorial with ASD for learning how to write an ALPS profile.
I often use the text
property of a desriptor
for a short human-readable documentation string. I'd like to see that in the rendering of the ASD documentation, too.
minimum: it should appear alongside all the other property values on the detail pages like type
, doc
, rel
, tag
, and rt
.
optimum: it would be great if the text
value appeared in any listings (home page, tag
pages, the descriptor
tables), too.
for example, on the home page, insert that text after the type
value:
<li><a href="docs/unsafe.doPersonCreate.html">doPersonCreate</a> (unsafe), {text}</li>
and, for descriptor list tables, add another column to the right of the type
value:
<table>
<thead>
<tr>
<th>id</th>
<th>type</th>
<th>text</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="semantic.home.html">home</a></td>
<td>semantic</td>
<td>{text}</td>
</tr>
<tr>
<td><a href="safe.goHome.html">goHome</a></td>
<td>safe</td>
<td>{text}</td>
</tr>
<tr>
<td><a href="safe.goPersonCollection.html">goPersonCollection</a></td>
<td>safe</td>
<td>{text}</td>
</tr>
</tbody>
</table>
Users can see the diagram in real time while editing the ALPS file.
Monitor the ALPS profile in Gulp to repaint and reload the browser if there are changes.
composer global exec asd -- --watch alps.json
Suggested by @mamund
No hassle for the preparation (php/composer/dot..)
上記のリポジトリでは、Index -> User
と User -> Index
のみ遷移を定義していますが、Userが持つ遷移指定されていない name
が状態として描画されてしまいます。
along with rendering the root TITLE on the index page, also render any root level DOC.VALUE elements the index page just under the title and before the list of ALPS, diagram, etc.
Raw descriptor output should be checked.
There are currently a few things to consider.
Or don't we need this feature in the first place?
Set composer timeout value to avoid composer exec timeout as following.
Check https://getcomposer.org/doc/06-config.md#process-timeout for details
In Process.php line 1204:
The process "asd '--watch' '--ignore-timeout' '/work/profile.json'" exceeded the timeout of 300 seconds.
InvalidHrefException
is thrown when the type is wrong.
{"id": "id", "type": "semantica"},
Originally posted by koriym November 23, 2021
When root profile references rt
from external profile like the following, throws RtDescriptorMissingException
{
"$schema": "https://alps-io.github.io/schemas/alps.json",
"alps": {
"descriptor": [
{"id": "Index", "descriptor": [
{"href": "#foo"}
]},
{"id": "foo", "type": "safe", "rt": "Foo.json#Foo"}
]
}
}
{
"$schema": "https://alps-io.github.io/schemas/alps.json",
"alps": {
"descriptor": [
{"id": "Foo", "descriptor": [
{"href": "#id"}
]
},
{"id": "id"}
]
}
}
The following commit is a red test.
when multiple links appear on the same line in the SVG document, clicking on any of those links always routes you to the first document in the line.
see source in example below:
If run without options, it will try to parse bin/asd.php as a profile.(!?)
....
ParsingException: "#!/usr/bin/env php
<?php
declare(strict_types=1);
....
echo sprintf('Tagged ASD generated. %s', $filteredSvg) . PHP_EOL;
" does not contain valid JSON
Parse error on line 1:
#!/usr/bin/env php<
^
Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
in /Users/akihito/git/app-state-diagram/src/JsonDecode.php:55
InvalidJsonException is thrown when the property is not defined.
This problem occur only in JSON.
"descriptor": [
{
"id": "id",
"aaaa": "hogehoge"
}
]
In the spec, link element a child element of the alps
and the descriptor
elements.
In my idea, can connect profile and schema like the following.
<descriptor id="Blog">
<link rel="schema" href="../schema/blog.json" />
</descriptor>
{
"descriptor": [
{"id": "Blog", "link": {"rel": "schema", "href": "../schema/blog.json"}}
]
}
The current message is too long because it contains JSON. Make it shorter.
asd: ParsingException("{
"$schema": "https://alps-io.github.io/schemas/alps.json"
"alps": {
"title": "ALPS Blog",
"doc" : { "value" : "An ALPS profile example for ASD"},
"link" : {"rel" : "issue", "href" : "https://github.com/alps-asd/app-state-diagram/issues"},
"descriptor": [
{"id": "id", "type": "semantic", "def": "https://schema.org/identifier"},
{"id": "articleBody", "type": "semantic", "def": "https://schema.org/articleBody"},
{"id": "dateCreated", "type": "semantic", "def": "https://schema.org/dateCreated"},
{"id": "Index", "type": "semantic", "title": "Index Page", "descriptor": [
{"href": "#goBlog"}
]},
{"id": "About", "type": "semantic", "descriptor": [
{"href": "#goBlog"}
]},
{"id": "Blog", "type": "semantic", "def": "https://schema.org/Blog", "title": "Blog post list", "rel": "collection", "descriptor": [
{"href": "#BlogPosting"},
{"href": "#goBlogPosting"},
{"href": "#goAbout"},
{"href": "#doPost"}
]},
{"id": "BlogPosting", "type": "semantic", "title": "Blog post item", "def": "https://schema.org/BlogPosting", "link": {"rel": "schema", "href": "schema/BlogPosting.json", "title": "JsonSchema file"} ,"descriptor": [
{"href": "#id"},
{"href": "#articleBody"},
{"href": "#dateCreated"},
{"href": "#goBlog"}
]},
{"id": "goStart", "type": "safe", "rt": "#Blog"},
{"id": "goAbout", "type": "safe", "rt": "#About", "rel": "about"},
{"id": "goBlog", "type": "safe", "rt": "#Blog", "rel": "collection"},
{"id": "goBlogPosting", "type": "safe", "rt": "#BlogPosting", "rel": "item", "descriptor": [
{"href": "#id"}
]},
{"id": "doPost", "type": "unsafe", "def": "https://activitystrea.ms/specs/json/1.0/#post-verb", "rt": "#Blog", "descriptor": [
{"href": "#articleBody"}
]}
]
}
}
" does not contain valid JSON
Parse error on line 2:
...chemas/alps.json" "alps": { "title
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']')
[10:06:03] 'asd' errored after 68 ms
[10:06:03] TypeError: this.emit is not a function
at asd (/Users/akihito/git/app-state-diagram/asd-sync/gulpfile.js:41:14)
at bound (node:domain:421:15)
at runBound (node:domain:432:12)
at asyncRunner (/Users/akihito/git/app-state-diagram/asd-sync/node_modules/async-done/index.js:55:18)
at processTicksAndRejections (node:internal/process/task_queues:78:11)
[10:08:20] Starting 'asd'...
ASD generated. /Users/akihito/git/app-state-diagram/docs/blog/index.html
Descriptors(12), Links(6)
[10:08:20] Finished 'asd' after 230 ms
[10:08:20] Starting 'reload'...
[10:08:20] Finished 'reload' after 308 μs
[Browsersync] Reloading Browsers...
[10:08:23] Starting 'asd'...
asd: ParsingException(Parse error on line 2:
...chemas/alps.json" "alps": { "title
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']')
[10:08:23] 'asd' errored after 82 ms
[10:08:23] TypeError: this.emit is not a function
at asd (/Users/akihito/git/app-state-diagram/asd-sync/gulpfile.js:41:14)
at bound (node:domain:421:15)
at runBound (node:domain:432:12)
at asyncRunner (/Users/akihito/git/app-state-diagram/asd-sync/node_modules/async-done/index.js:55:18)
at processTicksAndRejections (node:internal/process/task_queues:78:11)
[10:08:40] Starting 'asd'...
ASD generated. /Users/akihito/git/app-state-diagram/docs/blog/index.html
Descriptors(12), Links(6)
[10:08:40] Finished 'asd' after 268 ms
[10:08:40] Starting 'reload'...
[10:08:40] Finished 'reload' after 346 μs
[Browsersync] Reloading Browsers...
[10:08:43] Starting 'asd'...
asd: ParsingException(Parse error on line 2:
...chemas/alps.json" "alps": { "title
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']')
[10:08:43] 'asd' errored after 93 ms
[10:08:43] TypeError: this.emit is not a function
at asd (/Users/akihito/git/app-state-diagram/asd-sync/gulpfile.js:41:14)
at bound (node:domain:421:15)
at runBound (node:domain:432:12)
at asyncRunner (/Users/akihito/git/app-state-diagram/asd-sync/node_modules/async-done/index.js:55:18)
at processTicksAndRejections (node:internal/process/task_queues:78:11)
[10:09:11] Starting 'asd'...
ASD generated. /Users/akihito/git/app-state-diagram/docs/blog/index.html
Descriptors(12), Links(6)
[10:09:11] Finished 'asd' after 264 ms
[10:09:11] Starting 'reload'...
[10:09:11] Finished 'reload' after 307 μs
[Browsersync] Reloading Browsers...
[10:09:13] Starting 'asd'...
asd: ParsingException("{
"$schema": "https://alps-io.github.io/schemas/alps.json"
"alps": {
"title": "ALPS Blog",
"doc" : { "value" : "An ALPS profile example for ASD"},
"link" : {"rel" : "issue", "href" : "https://github.com/alps-asd/app-state-diagram/issues"},
"descriptor": [
{"id": "id", "type": "semantic", "def": "https://schema.org/identifier"},
{"id": "articleBody", "type": "semantic", "def": "https://schema.org/articleBody"},
{"id": "dateCreated", "type": "semantic", "def": "https://schema.org/dateCreated"},
{"id": "Index", "type": "semantic", "title": "Index Page", "descriptor": [
{"href": "#goBlog"}
]},
{"id": "About", "type": "semantic", "descriptor": [
{"href": "#goBlog"}
]},
{"id": "Blog", "type": "semantic", "def": "https://schema.org/Blog", "title": "Blog post list", "rel": "collection", "descriptor": [
{"href": "#BlogPosting"},
{"href": "#goBlogPosting"},
{"href": "#goAbout"},
{"href": "#doPost"}
]},
{"id": "BlogPosting", "type": "semantic", "title": "Blog post item", "def": "https://schema.org/BlogPosting", "link": {"rel": "schema", "href": "schema/BlogPosting.json", "title": "JsonSchema file"} ,"descriptor": [
{"href": "#id"},
{"href": "#articleBody"},
{"href": "#dateCreated"},
{"href": "#goBlog"}
]},
{"id": "goStart", "type": "safe", "rt": "#Blog"},
{"id": "goAbout", "type": "safe", "rt": "#About", "rel": "about"},
{"id": "goBlog", "type": "safe", "rt": "#Blog", "rel": "collection"},
{"id": "goBlogPosting", "type": "safe", "rt": "#BlogPosting", "rel": "item", "descriptor": [
{"href": "#id"}
]},
{"id": "doPost", "type": "unsafe", "def": "https://activitystrea.ms/specs/json/1.0/#post-verb", "rt": "#Blog", "descriptor": [
{"href": "#articleBody"}
]}
]
}
}
" does not contain valid JSON
Parse error on line 2:
...chemas/alps.json" "alps": { "title
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']')
[10:09:14] 'asd' errored after 67 ms
[10:09:14] TypeError: this.emit is not a function
at asd (/Users/akihito/git/app-state-diagram/asd-sync/gulpfile.js:41:14)
at bound (node:domain:421:15)
at runBound (node:domain:432:12)
at asyncRunner (/Users/akihito/git/app-state-diagram/asd-sync/node_modules/async-done/index.js:55:18)
at processTicksAndRejections (node:internal/process/task_queues:78:11)
^C
akihito@Air2020 app-state-diagram % ./bin/asd ./docs/blog/profile.json
asd: ParsingException("{
"$schema": "https://alps-io.github.io/schemas/alps.json"
"alps": {
"title": "ALPS Blog",
"doc" : { "value" : "An ALPS profile example for ASD"},
"link" : {"rel" : "issue", "href" : "https://github.com/alps-asd/app-state-diagram/issues"},
"descriptor": [
{"id": "id", "type": "semantic", "def": "https://schema.org/identifier"},
{"id": "articleBody", "type": "semantic", "def": "https://schema.org/articleBody"},
{"id": "dateCreated", "type": "semantic", "def": "https://schema.org/dateCreated"},
{"id": "Index", "type": "semantic", "title": "Index Page", "descriptor": [
{"href": "#goBlog"}
]},
{"id": "About", "type": "semantic", "descriptor": [
{"href": "#goBlog"}
]},
{"id": "Blog", "type": "semantic", "def": "https://schema.org/Blog", "title": "Blog post list", "rel": "collection", "descriptor": [
{"href": "#BlogPosting"},
{"href": "#goBlogPosting"},
{"href": "#goAbout"},
{"href": "#doPost"}
]},
{"id": "BlogPosting", "type": "semantic", "title": "Blog post item", "def": "https://schema.org/BlogPosting", "link": {"rel": "schema", "href": "schema/BlogPosting.json", "title": "JsonSchema file"} ,"descriptor": [
{"href": "#id"},
{"href": "#articleBody"},
{"href": "#dateCreated"},
{"href": "#goBlog"}
]},
{"id": "goStart", "type": "safe", "rt": "#Blog"},
{"id": "goAbout", "type": "safe", "rt": "#About", "rel": "about"},
{"id": "goBlog", "type": "safe", "rt": "#Blog", "rel": "collection"},
{"id": "goBlogPosting", "type": "safe", "rt": "#BlogPosting", "rel": "item", "descriptor": [
{"href": "#id"}
]},
{"id": "doPost", "type": "unsafe", "def": "https://activitystrea.ms/specs/json/1.0/#post-verb", "rt": "#Blog", "descriptor": [
{"href": "#articleBody"}
]}
]
}
}
" does not contain valid JSON
Parse error on line 2:
...chemas/alps.json" "alps": { "title
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']')
... should be
asd: ParsingException(Parse error on line 2:
...chemas/alps.json" "alps": { "title
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']')
生成されるリンクのURLの大文字小文字に不整合がある。
リンクはsemantic.TodoList.html
https://alps-asd.github.io/app-state-diagram/todomvc/docs/semantic.TodoList.html
しかし実際 に生成されているファイルはsemantic.todoList.html
https://github.com/alps-asd/app-state-diagram/blob/master/docs/todomvc/docs/semantic.todoList.html
Support both ADM/ARM docker images
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.