@origostudio/origo-design 0.0.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.
- package/.editorconfig +13 -0
- package/.gitattributes +22 -0
- package/.perf-baseline.json +12 -0
- package/.prettierignore +13 -0
- package/.prettierrc +10 -0
- package/.vscode/extensions.json +3 -0
- package/BRANCH-PROTECTION.md +25 -0
- package/CHANGELOG.md +292 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/commitlint.config.js +6 -0
- package/dist/packages/cli/CHANGELOG.md +92 -0
- package/dist/packages/cli/README.md +11 -0
- package/dist/packages/cli/package.json +16 -0
- package/dist/packages/cli/package.json.bak +16 -0
- package/dist/packages/cli/src/commands/generate/entity.d.ts +2 -0
- package/dist/packages/cli/src/commands/generate/entity.js +24 -0
- package/dist/packages/cli/src/commands/generate/entity.js.map +1 -0
- package/dist/packages/cli/src/commands/generate/index.d.ts +2 -0
- package/dist/packages/cli/src/commands/generate/index.js +30 -0
- package/dist/packages/cli/src/commands/generate/index.js.map +1 -0
- package/dist/packages/cli/src/commands/init.d.ts +5 -0
- package/dist/packages/cli/src/commands/init.js +27 -0
- package/dist/packages/cli/src/commands/init.js.map +1 -0
- package/dist/packages/cli/src/commands/new.d.ts +2 -0
- package/dist/packages/cli/src/commands/new.js +24 -0
- package/dist/packages/cli/src/commands/new.js.map +1 -0
- package/dist/packages/cli/src/commands/validate.d.ts +2 -0
- package/dist/packages/cli/src/commands/validate.js +50 -0
- package/dist/packages/cli/src/commands/validate.js.map +1 -0
- package/dist/packages/cli/src/index.d.ts +11 -0
- package/dist/packages/cli/src/index.js +15 -0
- package/dist/packages/cli/src/index.js.map +1 -0
- package/dist/packages/cli/src/lib/cli.d.ts +1 -0
- package/dist/packages/cli/src/lib/cli.js +7 -0
- package/dist/packages/cli/src/lib/cli.js.map +1 -0
- package/dist/packages/cli/src/lib/generator.d.ts +16 -0
- package/dist/packages/cli/src/lib/generator.js +165 -0
- package/dist/packages/cli/src/lib/generator.js.map +1 -0
- package/dist/packages/cli/src/lib/scaffolding.d.ts +5 -0
- package/dist/packages/cli/src/lib/scaffolding.js +87 -0
- package/dist/packages/cli/src/lib/scaffolding.js.map +1 -0
- package/dist/packages/cli/src/lib/validation.d.ts +4 -0
- package/dist/packages/cli/src/lib/validation.js +191 -0
- package/dist/packages/cli/src/lib/validation.js.map +1 -0
- package/dist/packages/cli/src/main.d.ts +4 -0
- package/dist/packages/cli/src/main.js +38 -0
- package/dist/packages/cli/src/main.js.map +1 -0
- package/dist/packages/cli/src/templates/entity.json +6 -0
- package/dist/packages/cli/src/templates/extension.json +8 -0
- package/dist/packages/cli/src/templates/index.d.ts +29 -0
- package/dist/packages/cli/src/templates/index.js +61 -0
- package/dist/packages/cli/src/templates/index.js.map +1 -0
- package/dist/packages/cli/src/templates/origo.json +16 -0
- package/dist/packages/cli/src/utils/errors.d.ts +15 -0
- package/dist/packages/cli/src/utils/errors.js +58 -0
- package/dist/packages/cli/src/utils/errors.js.map +1 -0
- package/dist/packages/core/CHANGELOG.md +275 -0
- package/dist/packages/core/README.md +11 -0
- package/dist/packages/core/package.json +21 -0
- package/dist/packages/core/package.json.bak +21 -0
- package/dist/packages/core/src/extension-api/extension-manager.d.ts +35 -0
- package/dist/packages/core/src/extension-api/extension-manager.js +300 -0
- package/dist/packages/core/src/extension-api/extension-manager.js.map +1 -0
- package/dist/packages/core/src/extension-api/index.d.ts +2 -0
- package/dist/packages/core/src/extension-api/index.js +6 -0
- package/dist/packages/core/src/extension-api/index.js.map +1 -0
- package/dist/packages/core/src/extension-api/types.d.ts +34 -0
- package/dist/packages/core/src/extension-api/types.js +3 -0
- package/dist/packages/core/src/extension-api/types.js.map +1 -0
- package/dist/packages/core/src/index.d.ts +3 -0
- package/dist/packages/core/src/index.js +7 -0
- package/dist/packages/core/src/index.js.map +1 -0
- package/dist/packages/core/src/schemas/capability.schema.json +104 -0
- package/dist/packages/core/src/schemas/contract.schema.json +52 -0
- package/dist/packages/core/src/schemas/domain.schema.json +47 -0
- package/dist/packages/core/src/schemas/entity.schema.json +72 -0
- package/dist/packages/core/src/schemas/extension.schema.json +39 -0
- package/dist/packages/core/src/schemas/permission.schema.json +21 -0
- package/dist/packages/core/src/types/ast.d.ts +17 -0
- package/dist/packages/core/src/types/ast.js +3 -0
- package/dist/packages/core/src/types/ast.js.map +1 -0
- package/dist/packages/core/src/types/domain.d.ts +101 -0
- package/dist/packages/core/src/types/domain.js +8 -0
- package/dist/packages/core/src/types/domain.js.map +1 -0
- package/dist/packages/core/src/types/validation.d.ts +12 -0
- package/dist/packages/core/src/types/validation.js +16 -0
- package/dist/packages/core/src/types/validation.js.map +1 -0
- package/dist/packages/core/src/validator/ast-validator.d.ts +11 -0
- package/dist/packages/core/src/validator/ast-validator.js +388 -0
- package/dist/packages/core/src/validator/ast-validator.js.map +1 -0
- package/dist/packages/core/src/validator/index.d.ts +23 -0
- package/dist/packages/core/src/validator/index.js +143 -0
- package/dist/packages/core/src/validator/index.js.map +1 -0
- package/dist/packages/core/src/validator/serializer.d.ts +11 -0
- package/dist/packages/core/src/validator/serializer.js +99 -0
- package/dist/packages/core/src/validator/serializer.js.map +1 -0
- package/eslint.config.js +114 -0
- package/generate_prompts.js +19 -0
- package/jest.config.ts +5 -0
- package/jest.preset.js +3 -0
- package/nx.json +169 -0
- package/package.json +115 -0
- package/packages/angular-renderer/CHANGELOG.md +274 -0
- package/packages/angular-renderer/README.md +11 -0
- package/packages/angular-renderer/package.json +20 -0
- package/packages/angular-renderer/playwright-ct.config.ts +23 -0
- package/packages/angular-renderer/src/adapters/web/adapter.ts +145 -0
- package/packages/angular-renderer/src/adapters/web/experience-adapter.service.ts +21 -0
- package/packages/angular-renderer/src/components/primitives/button/button.component.html +9 -0
- package/packages/angular-renderer/src/components/primitives/button/button.component.pw.ts +19 -0
- package/packages/angular-renderer/src/components/primitives/button/button.component.scss +31 -0
- package/packages/angular-renderer/src/components/primitives/button/button.component.ts +67 -0
- package/packages/angular-renderer/src/components/primitives/primitives.a11y.pw.ts +33 -0
- package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.html +10 -0
- package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.pw.ts +29 -0
- package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.scss +42 -0
- package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.ts +84 -0
- package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.html +2 -0
- package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.pw.ts +19 -0
- package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.scss +5 -0
- package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.ts +74 -0
- package/packages/angular-renderer/src/index.ts +7 -0
- package/packages/angular-renderer/src/lib/renderer.component.ts +118 -0
- package/packages/angular-renderer/src/lib/renderer.tokens.ts +9 -0
- package/packages/angular-renderer/src/lib/test-utils.ts +26 -0
- package/packages/angular-renderer/src/lib/theme.provider.ts +83 -0
- package/packages/angular-renderer/src/test-setup.ts +8 -0
- package/packages/cli/CHANGELOG.md +92 -0
- package/packages/cli/README.md +11 -0
- package/packages/cli/package.json +16 -0
- package/packages/cli/src/commands/generate/entity.ts +20 -0
- package/packages/cli/src/commands/generate/index.ts +28 -0
- package/packages/cli/src/commands/init.ts +28 -0
- package/packages/cli/src/commands/new.ts +22 -0
- package/packages/cli/src/commands/validate.ts +47 -0
- package/packages/cli/src/index.ts +11 -0
- package/packages/cli/src/lib/cli.ts +3 -0
- package/packages/cli/src/lib/generator.ts +181 -0
- package/packages/cli/src/lib/scaffolding.ts +104 -0
- package/packages/cli/src/lib/validation.ts +218 -0
- package/packages/cli/src/main.ts +38 -0
- package/packages/cli/src/templates/entity.json +6 -0
- package/packages/cli/src/templates/extension.json +8 -0
- package/packages/cli/src/templates/index.ts +94 -0
- package/packages/cli/src/templates/origo.json +16 -0
- package/packages/cli/src/utils/errors.ts +80 -0
- package/packages/core/CHANGELOG.md +275 -0
- package/packages/core/README.md +11 -0
- package/packages/core/package-lock.json +1035 -0
- package/packages/core/package.json +21 -0
- package/packages/core/scripts/generate-types.ts +23 -0
- package/packages/core/src/extension-api/extension-manager.ts +378 -0
- package/packages/core/src/extension-api/index.ts +2 -0
- package/packages/core/src/extension-api/types.ts +37 -0
- package/packages/core/src/index.ts +3 -0
- package/packages/core/src/schemas/__fixtures__/target-page.json +222 -0
- package/packages/core/src/schemas/capability.schema.json +104 -0
- package/packages/core/src/schemas/contract.schema.json +52 -0
- package/packages/core/src/schemas/domain.schema.json +47 -0
- package/packages/core/src/schemas/entity.schema.json +72 -0
- package/packages/core/src/schemas/extension.schema.json +39 -0
- package/packages/core/src/schemas/permission.schema.json +21 -0
- package/packages/core/src/types/ast.ts +20 -0
- package/packages/core/src/types/domain.ts +105 -0
- package/packages/core/src/types/validation.ts +29 -0
- package/packages/core/src/validator/ast-validator.ts +406 -0
- package/packages/core/src/validator/index.ts +207 -0
- package/packages/core/src/validator/serializer.ts +120 -0
- package/packages/core/test/fixtures/target-page.json +87 -0
- package/packages/design-tokens/CHANGELOG.md +273 -0
- package/packages/design-tokens/README.md +11 -0
- package/packages/design-tokens/package.json +25 -0
- package/packages/design-tokens/src/build.ts +97 -0
- package/packages/design-tokens/src/compile.ts +60 -0
- package/packages/design-tokens/src/index.ts +7 -0
- package/packages/design-tokens/src/runtime/index.ts +2 -0
- package/packages/design-tokens/src/runtime/theme-fetcher.ts +90 -0
- package/packages/design-tokens/src/runtime/theme-injector.ts +149 -0
- package/packages/design-tokens/src/schemas/base-tokens.schema.json +127 -0
- package/packages/design-tokens/src/schemas/semantic-tokens.schema.json +52 -0
- package/packages/design-tokens/src/tokens/base.json +46 -0
- package/packages/design-tokens/src/tokens/semantic.json +33 -0
- package/packages/playground/CHANGELOG.md +12 -0
- package/packages/playground/package.json +10 -0
- package/packages/playground/public/favicon.ico +0 -0
- package/packages/playground/src/app/app.component.html +1 -0
- package/packages/playground/src/app/app.component.scss +4 -0
- package/packages/playground/src/app/app.component.ts +13 -0
- package/packages/playground/src/app/app.config.ts +9 -0
- package/packages/playground/src/editor/badl-editor.component.html +1 -0
- package/packages/playground/src/editor/badl-editor.component.scss +10 -0
- package/packages/playground/src/editor/badl-editor.component.ts +57 -0
- package/packages/playground/src/editor/editor.worker.ts +1 -0
- package/packages/playground/src/editor/json.worker.ts +1 -0
- package/packages/playground/src/editor/monaco-environment.ts +11 -0
- package/packages/playground/src/editor/schema-registry.ts +30 -0
- package/packages/playground/src/index.html +13 -0
- package/packages/playground/src/main.ts +5 -0
- package/packages/playground/src/schemas/capability.schema.json +104 -0
- package/packages/playground/src/schemas/contract.schema.json +52 -0
- package/packages/playground/src/schemas/domain.schema.json +47 -0
- package/packages/playground/src/schemas/entity.schema.json +72 -0
- package/packages/playground/src/schemas/extension.schema.json +39 -0
- package/packages/playground/src/schemas/permission.schema.json +21 -0
- package/packages/playground/src/styles.scss +8 -0
- package/packages/playground/src/test-setup.ts +146 -0
- package/packages/playground/vite.config.ts +12 -0
- package/packages/playground/vitest.config.mjs +24 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializeAST = serializeAST;
|
|
4
|
+
const ast_validator_1 = require("./ast-validator");
|
|
5
|
+
/**
|
|
6
|
+
* Deep clones and canonically sorts an object/array.
|
|
7
|
+
* Also detects circular references and unsupported types.
|
|
8
|
+
*/
|
|
9
|
+
function canonicalize(obj, seen = new WeakSet(), errors = [], depth = 1) {
|
|
10
|
+
if (depth > ast_validator_1.MAX_AST_DEPTH) {
|
|
11
|
+
errors.push({
|
|
12
|
+
type: 'MAX_DEPTH_EXCEEDED',
|
|
13
|
+
message: `Maximum AST depth exceeded (${ast_validator_1.MAX_AST_DEPTH}) during canonicalization`,
|
|
14
|
+
});
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (obj === null || typeof obj !== 'object') {
|
|
18
|
+
return obj;
|
|
19
|
+
}
|
|
20
|
+
if (seen.has(obj)) {
|
|
21
|
+
errors.push({
|
|
22
|
+
type: 'CIRCULAR_REFERENCE',
|
|
23
|
+
message: 'Invalid AST: Circular reference detected during canonicalization',
|
|
24
|
+
});
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
if (Object.prototype.toString.call(obj) !== '[object Object]' && !Array.isArray(obj)) {
|
|
28
|
+
errors.push({
|
|
29
|
+
type: 'INVALID_TYPE',
|
|
30
|
+
message: `Invalid AST: Unsupported type ${obj.constructor?.name || typeof obj}`,
|
|
31
|
+
});
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
seen.add(obj);
|
|
35
|
+
if (Array.isArray(obj)) {
|
|
36
|
+
// Process children first
|
|
37
|
+
const mapped = obj.map(item => canonicalize(item, seen, errors, depth + 1));
|
|
38
|
+
// Sort deterministically
|
|
39
|
+
mapped.sort((a, b) => {
|
|
40
|
+
const aIsObj = typeof a === 'object' && a !== null;
|
|
41
|
+
const bIsObj = typeof b === 'object' && b !== null;
|
|
42
|
+
if (aIsObj && bIsObj) {
|
|
43
|
+
if ('id' in a && 'id' in b) {
|
|
44
|
+
const idA = String(a.id);
|
|
45
|
+
const idB = String(b.id);
|
|
46
|
+
return idA < idB ? -1 : idA > idB ? 1 : 0;
|
|
47
|
+
}
|
|
48
|
+
if ('name' in a && 'name' in b) {
|
|
49
|
+
const nameA = String(a.name);
|
|
50
|
+
const nameB = String(b.name);
|
|
51
|
+
return nameA < nameB ? -1 : nameA > nameB ? 1 : 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Fallback for primitives, heterogeneous objects, or objects without id/name
|
|
55
|
+
const strA = JSON.stringify(a);
|
|
56
|
+
const strB = JSON.stringify(b);
|
|
57
|
+
return strA < strB ? -1 : strA > strB ? 1 : 0;
|
|
58
|
+
});
|
|
59
|
+
seen.delete(obj);
|
|
60
|
+
return mapped;
|
|
61
|
+
}
|
|
62
|
+
// It is an object, sort its keys
|
|
63
|
+
const objAsRecord = obj;
|
|
64
|
+
const sortedKeys = Object.keys(objAsRecord).sort();
|
|
65
|
+
const result = {};
|
|
66
|
+
for (const key of sortedKeys) {
|
|
67
|
+
result[key] = canonicalize(objAsRecord[key], seen, errors, depth + 1);
|
|
68
|
+
}
|
|
69
|
+
seen.delete(obj);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Serializes the parsed memory model into a canonical JSON AST.
|
|
74
|
+
* Enforces `schemaVersion`, stable key ordering, and stable array ordering.
|
|
75
|
+
*
|
|
76
|
+
* @param ast The canonical AST to serialize
|
|
77
|
+
* @returns Byte-for-byte deterministic JSON string
|
|
78
|
+
* @throws {ASTValidationError} If validation or canonicalization fails
|
|
79
|
+
*/
|
|
80
|
+
function serializeAST(ast) {
|
|
81
|
+
if (!ast || !ast.schemaVersion) {
|
|
82
|
+
return [null, [{ type: 'INVALID_FORMAT', message: 'Invalid AST: Missing schemaVersion' }]];
|
|
83
|
+
}
|
|
84
|
+
if (!Array.isArray(ast.domains)) {
|
|
85
|
+
return [null, [{ type: 'INVALID_FORMAT', message: 'Invalid AST: domains must be an array' }]];
|
|
86
|
+
}
|
|
87
|
+
// Validate semantics before serializing
|
|
88
|
+
const errors = (0, ast_validator_1.validateAST)(ast);
|
|
89
|
+
if (errors.length > 0) {
|
|
90
|
+
return [null, errors];
|
|
91
|
+
}
|
|
92
|
+
const canonicalErrors = [];
|
|
93
|
+
const canonical = canonicalize(ast, new WeakSet(), canonicalErrors, 1);
|
|
94
|
+
if (canonicalErrors.length > 0) {
|
|
95
|
+
return [null, canonicalErrors];
|
|
96
|
+
}
|
|
97
|
+
return [JSON.stringify(canonical), []];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../../../packages/core/src/validator/serializer.ts"],"names":[],"mappings":"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"}
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
const nx = require('@nx/eslint-plugin');
|
|
2
|
+
|
|
3
|
+
module.exports = [
|
|
4
|
+
...nx.configs['flat/base'],
|
|
5
|
+
...nx.configs['flat/typescript'],
|
|
6
|
+
...nx.configs['flat/javascript'],
|
|
7
|
+
{
|
|
8
|
+
ignores: [
|
|
9
|
+
'**/dist',
|
|
10
|
+
'**/tmp',
|
|
11
|
+
'**/out-tsc',
|
|
12
|
+
'**/.astro',
|
|
13
|
+
'**/_bmad-output',
|
|
14
|
+
'**/_bmad',
|
|
15
|
+
'**/.agent',
|
|
16
|
+
'tools/spikes/**/worker.bundle.js',
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
|
|
21
|
+
rules: {
|
|
22
|
+
'@nx/enforce-module-boundaries': [
|
|
23
|
+
'error',
|
|
24
|
+
{
|
|
25
|
+
enforceBuildableLibDependency: true,
|
|
26
|
+
allow: [],
|
|
27
|
+
depConstraints: [
|
|
28
|
+
{
|
|
29
|
+
sourceTag: 'type:app',
|
|
30
|
+
onlyDependOnLibsWithTags: [
|
|
31
|
+
'type:feature',
|
|
32
|
+
'type:ui',
|
|
33
|
+
'type:data-access',
|
|
34
|
+
'type:util',
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
sourceTag: 'type:feature',
|
|
39
|
+
onlyDependOnLibsWithTags: ['type:ui', 'type:data-access', 'type:util'],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
sourceTag: 'type:ui',
|
|
43
|
+
onlyDependOnLibsWithTags: ['type:util'],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
sourceTag: 'type:data-access',
|
|
47
|
+
onlyDependOnLibsWithTags: ['type:util'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
sourceTag: 'type:util',
|
|
51
|
+
onlyDependOnLibsWithTags: ['type:util', 'type:lib', 'type:tokens'],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
sourceTag: 'type:lib',
|
|
55
|
+
onlyDependOnLibsWithTags: ['type:lib', 'type:tokens', 'type:util'],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
sourceTag: 'type:tokens',
|
|
59
|
+
onlyDependOnLibsWithTags: [],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
files: ['**/*.ts', '**/*.tsx'],
|
|
68
|
+
// Override or add rules here
|
|
69
|
+
rules: {
|
|
70
|
+
'no-restricted-imports': [
|
|
71
|
+
'error',
|
|
72
|
+
{
|
|
73
|
+
patterns: [
|
|
74
|
+
{
|
|
75
|
+
group: [
|
|
76
|
+
'**/*.fixture.json',
|
|
77
|
+
'**/*.mock.json',
|
|
78
|
+
'**/*.data.json',
|
|
79
|
+
'**/*.large.json',
|
|
80
|
+
'**/seed.json',
|
|
81
|
+
],
|
|
82
|
+
message:
|
|
83
|
+
'Importing massive JSON fixtures directly can cause TypeScript compiler OOM crashes (NFR-PREP-008). Use fs.readFile at runtime or stream parsing instead.',
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
files: ['**/*.js', '**/*.jsx'],
|
|
92
|
+
// Override or add rules here
|
|
93
|
+
rules: {
|
|
94
|
+
'no-restricted-imports': [
|
|
95
|
+
'error',
|
|
96
|
+
{
|
|
97
|
+
patterns: [
|
|
98
|
+
{
|
|
99
|
+
group: [
|
|
100
|
+
'**/*.fixture.json',
|
|
101
|
+
'**/*.mock.json',
|
|
102
|
+
'**/*.data.json',
|
|
103
|
+
'**/*.large.json',
|
|
104
|
+
'**/seed.json',
|
|
105
|
+
],
|
|
106
|
+
message:
|
|
107
|
+
'Importing massive JSON fixtures directly can cause TypeScript compiler OOM crashes (NFR-PREP-008). Use fs.readFile at runtime or stream parsing instead.',
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const diff = fs.readFileSync('_bmad-output/implementation-artifacts/diff.txt', 'utf8');
|
|
3
|
+
const specPath =
|
|
4
|
+
'_bmad-output/implementation-artifacts/stories/4-4-extensibility-and-plugin-schema.md';
|
|
5
|
+
|
|
6
|
+
const blindHunterPrompt = `Invoke the \`bmad-review-adversarial-general\` skill on this diff:\n\n${diff}`;
|
|
7
|
+
const edgeCaseHunterPrompt = `Invoke the \`bmad-review-edge-case-hunter\` skill on this diff:\n\n${diff}`;
|
|
8
|
+
const acceptanceAuditorPrompt = `You are an Acceptance Auditor. Review the provided diff against \`${specPath}\` and any loaded context docs. Check for: violations of acceptance criteria, deviations from spec intent, missing implementation of specified behavior, contradictions between spec constraints and actual code. Output findings as a Markdown list. Each finding: one-line title, which AC/constraint it violates, and evidence from the diff.\n\nDiff:\n${diff}`;
|
|
9
|
+
|
|
10
|
+
fs.writeFileSync('_bmad-output/implementation-artifacts/prompt-blind-hunter.md', blindHunterPrompt);
|
|
11
|
+
fs.writeFileSync(
|
|
12
|
+
'_bmad-output/implementation-artifacts/prompt-edge-case-hunter.md',
|
|
13
|
+
edgeCaseHunterPrompt
|
|
14
|
+
);
|
|
15
|
+
fs.writeFileSync(
|
|
16
|
+
'_bmad-output/implementation-artifacts/prompt-acceptance-auditor.md',
|
|
17
|
+
acceptanceAuditorPrompt
|
|
18
|
+
);
|
|
19
|
+
console.log('Prompts generated successfully.');
|
package/jest.config.ts
ADDED
package/jest.preset.js
ADDED
package/nx.json
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/nx/schemas/nx-schema.json",
|
|
3
|
+
"cacheDirectory": ".nx/cache",
|
|
4
|
+
"namedInputs": {
|
|
5
|
+
"default": ["{projectRoot}/**/*", "sharedGlobals"],
|
|
6
|
+
"production": [
|
|
7
|
+
"default",
|
|
8
|
+
"!{projectRoot}/**/?(*.)+(spec|test|cy).[jt]s?(x)?(.snap)",
|
|
9
|
+
"!{projectRoot}/tsconfig.spec.json",
|
|
10
|
+
"!{projectRoot}/jest.config.[jt]s",
|
|
11
|
+
"!{projectRoot}/src/test-setup.[jt]s",
|
|
12
|
+
"!{projectRoot}/test-setup.[jt]s"
|
|
13
|
+
],
|
|
14
|
+
"sharedGlobals": []
|
|
15
|
+
},
|
|
16
|
+
"plugins": [
|
|
17
|
+
{
|
|
18
|
+
"plugin": "@nx/eslint/plugin",
|
|
19
|
+
"options": {
|
|
20
|
+
"targetName": "lint"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"plugin": "@nx/jest/plugin",
|
|
25
|
+
"options": {
|
|
26
|
+
"targetName": "test"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"plugin": "@nx/playwright/plugin",
|
|
31
|
+
"options": {
|
|
32
|
+
"targetName": "e2e"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"targetDefaults": {
|
|
37
|
+
"@angular-devkit/build-angular:application": {
|
|
38
|
+
"cache": true,
|
|
39
|
+
"dependsOn": ["^build"],
|
|
40
|
+
"inputs": ["production", "^production"]
|
|
41
|
+
},
|
|
42
|
+
"@nx/eslint:lint": {
|
|
43
|
+
"cache": true,
|
|
44
|
+
"inputs": [
|
|
45
|
+
"default",
|
|
46
|
+
"^default",
|
|
47
|
+
"{workspaceRoot}/.eslintrc.json",
|
|
48
|
+
"{workspaceRoot}/.eslintignore",
|
|
49
|
+
"{workspaceRoot}/eslint.config.js",
|
|
50
|
+
"{workspaceRoot}/tools/eslint-rules/**/*"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"@nx/jest:jest": {
|
|
54
|
+
"cache": true,
|
|
55
|
+
"inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"],
|
|
56
|
+
"options": {
|
|
57
|
+
"passWithNoTests": true
|
|
58
|
+
},
|
|
59
|
+
"configurations": {
|
|
60
|
+
"ci": {
|
|
61
|
+
"ci": true,
|
|
62
|
+
"codeCoverage": true
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"@nx/js:tsc": {
|
|
67
|
+
"cache": true,
|
|
68
|
+
"dependsOn": ["^build"],
|
|
69
|
+
"inputs": ["production", "^production"]
|
|
70
|
+
},
|
|
71
|
+
"@nx/esbuild:esbuild": {
|
|
72
|
+
"cache": true,
|
|
73
|
+
"dependsOn": ["^build"],
|
|
74
|
+
"inputs": ["production", "^production"]
|
|
75
|
+
},
|
|
76
|
+
"@angular/build:application": {
|
|
77
|
+
"cache": true,
|
|
78
|
+
"dependsOn": ["^build"],
|
|
79
|
+
"inputs": ["production", "^production"]
|
|
80
|
+
},
|
|
81
|
+
"@angular/build:unit-test": {
|
|
82
|
+
"cache": true,
|
|
83
|
+
"inputs": ["default", "^production"]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"workspaceLayout": {
|
|
87
|
+
"appsDir": "apps",
|
|
88
|
+
"libsDir": "packages"
|
|
89
|
+
},
|
|
90
|
+
"generators": {
|
|
91
|
+
"@nx/angular:component": {
|
|
92
|
+
"type": "component",
|
|
93
|
+
"standalone": true
|
|
94
|
+
},
|
|
95
|
+
"@schematics/angular:component": {
|
|
96
|
+
"type": "component"
|
|
97
|
+
},
|
|
98
|
+
"@nx/angular:directive": {
|
|
99
|
+
"type": "directive"
|
|
100
|
+
},
|
|
101
|
+
"@schematics/angular:directive": {
|
|
102
|
+
"type": "directive"
|
|
103
|
+
},
|
|
104
|
+
"@nx/angular:service": {
|
|
105
|
+
"type": "service"
|
|
106
|
+
},
|
|
107
|
+
"@schematics/angular:service": {
|
|
108
|
+
"type": "service"
|
|
109
|
+
},
|
|
110
|
+
"@nx/angular:scam": {
|
|
111
|
+
"type": "component"
|
|
112
|
+
},
|
|
113
|
+
"@nx/angular:scam-directive": {
|
|
114
|
+
"type": "directive"
|
|
115
|
+
},
|
|
116
|
+
"@nx/angular:guard": {
|
|
117
|
+
"typeSeparator": "."
|
|
118
|
+
},
|
|
119
|
+
"@schematics/angular:guard": {
|
|
120
|
+
"typeSeparator": "."
|
|
121
|
+
},
|
|
122
|
+
"@nx/angular:interceptor": {
|
|
123
|
+
"typeSeparator": "."
|
|
124
|
+
},
|
|
125
|
+
"@schematics/angular:interceptor": {
|
|
126
|
+
"typeSeparator": "."
|
|
127
|
+
},
|
|
128
|
+
"@nx/angular:module": {
|
|
129
|
+
"typeSeparator": "."
|
|
130
|
+
},
|
|
131
|
+
"@schematics/angular:module": {
|
|
132
|
+
"typeSeparator": "."
|
|
133
|
+
},
|
|
134
|
+
"@nx/angular:pipe": {
|
|
135
|
+
"typeSeparator": "."
|
|
136
|
+
},
|
|
137
|
+
"@schematics/angular:pipe": {
|
|
138
|
+
"typeSeparator": "."
|
|
139
|
+
},
|
|
140
|
+
"@nx/angular:resolver": {
|
|
141
|
+
"typeSeparator": "."
|
|
142
|
+
},
|
|
143
|
+
"@schematics/angular:resolver": {
|
|
144
|
+
"typeSeparator": "."
|
|
145
|
+
},
|
|
146
|
+
"@nx/angular:application": {
|
|
147
|
+
"e2eTestRunner": "playwright",
|
|
148
|
+
"linter": "eslint",
|
|
149
|
+
"style": "scss",
|
|
150
|
+
"unitTestRunner": "vitest-angular"
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"analytics": true,
|
|
154
|
+
"nxCloudId": "6a75f22a66c65db5106c4220",
|
|
155
|
+
"release": {
|
|
156
|
+
"projects": ["packages/*"],
|
|
157
|
+
"version": {
|
|
158
|
+
"conventionalCommits": true,
|
|
159
|
+
"fallbackCurrentVersionResolver": "disk"
|
|
160
|
+
},
|
|
161
|
+
"changelog": {
|
|
162
|
+
"automaticFromRef": true,
|
|
163
|
+
"workspaceChangelog": {
|
|
164
|
+
"createRelease": "github"
|
|
165
|
+
},
|
|
166
|
+
"projectChangelogs": true
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@origostudio/origo-design",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/OrigoStudio/origo-design.git"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "nx serve origo-design",
|
|
11
|
+
"build": "nx run-many -t build",
|
|
12
|
+
"test": "nx run-many -t test",
|
|
13
|
+
"lint": "nx run-many -t lint",
|
|
14
|
+
"e2e": "nx run-many -t e2e",
|
|
15
|
+
"perf:benchmark": "ts-node tools/benchmarks/compare-baseline.ts",
|
|
16
|
+
"perf:test": "ts-node tools/benchmarks/run-tests.ts",
|
|
17
|
+
"spike:epic7": "node tools/spikes/epic7-worker-csp/build-spike.js",
|
|
18
|
+
"prepare": "husky",
|
|
19
|
+
"release": "nx release --skip-publish",
|
|
20
|
+
"validate:registry": "ts-node --project tsconfig.base.json tools/test-registry/validate-registry.ts"
|
|
21
|
+
},
|
|
22
|
+
"private": false,
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@angular/animations": "22.0.8",
|
|
25
|
+
"@angular/common": "22.0.8",
|
|
26
|
+
"@angular/compiler": "22.0.8",
|
|
27
|
+
"@angular/core": "22.0.8",
|
|
28
|
+
"@angular/forms": "22.0.8",
|
|
29
|
+
"@angular/platform-browser": "22.0.8",
|
|
30
|
+
"@angular/platform-browser-dynamic": "22.0.8",
|
|
31
|
+
"@angular/router": "22.0.8",
|
|
32
|
+
"ajv": "^8.20.0",
|
|
33
|
+
"ajv-errors": "^3.0.0",
|
|
34
|
+
"ajv-formats": "^3.0.1",
|
|
35
|
+
"comlink": "^4.4.2",
|
|
36
|
+
"commander": "^15.0.0",
|
|
37
|
+
"monaco-editor": "^0.50.0",
|
|
38
|
+
"rxjs": "~7.8.0",
|
|
39
|
+
"tslib": "^2.3.0"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=22.0.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@analogjs/vite-plugin-angular": "^2.7.1",
|
|
46
|
+
"@angular-devkit/build-angular": "22.0.9",
|
|
47
|
+
"@angular-devkit/core": "22.0.9",
|
|
48
|
+
"@angular-devkit/schematics": "22.0.9",
|
|
49
|
+
"@angular/build": "22.0.9",
|
|
50
|
+
"@angular/cli": "22.0.9",
|
|
51
|
+
"@angular/compiler-cli": "22.0.8",
|
|
52
|
+
"@angular/language-service": "22.0.8",
|
|
53
|
+
"@astrojs/starlight": "^0.25.0",
|
|
54
|
+
"@axe-core/playwright": "^4.13.0",
|
|
55
|
+
"@commitlint/cli": "^21.2.1",
|
|
56
|
+
"@commitlint/config-conventional": "^21.2.0",
|
|
57
|
+
"@nx/angular": "23.1.0",
|
|
58
|
+
"@nx/devkit": "23.1.0",
|
|
59
|
+
"@nx/esbuild": "23.1.0",
|
|
60
|
+
"@nx/eslint": "23.1.0",
|
|
61
|
+
"@nx/eslint-plugin": "23.1.0",
|
|
62
|
+
"@nx/jest": "23.1.0",
|
|
63
|
+
"@nx/js": "23.1.0",
|
|
64
|
+
"@nx/playwright": "23.1.0",
|
|
65
|
+
"@nx/vite": "23.1.0",
|
|
66
|
+
"@nx/web": "23.1.0",
|
|
67
|
+
"@nx/workspace": "23.1.0",
|
|
68
|
+
"@playwright/test": "^1.36.0",
|
|
69
|
+
"@schematics/angular": "22.0.9",
|
|
70
|
+
"@swc/helpers": "~0.5.18",
|
|
71
|
+
"@types/jest": "30.0.0",
|
|
72
|
+
"@types/json-source-map": "^0.6.0",
|
|
73
|
+
"@types/node": "^22.12.0",
|
|
74
|
+
"@types/semver": "^7.8.0",
|
|
75
|
+
"@typescript-eslint/eslint-plugin": "8.65.0",
|
|
76
|
+
"@typescript-eslint/parser": "8.65.0",
|
|
77
|
+
"@typescript-eslint/utils": "^8.58.0",
|
|
78
|
+
"angular-eslint": "^22.0.0",
|
|
79
|
+
"astro": "^4.13.2",
|
|
80
|
+
"cookie": "^2.0.1",
|
|
81
|
+
"esbuild": "^0.27.0",
|
|
82
|
+
"eslint": "9.9.1",
|
|
83
|
+
"eslint-config-prettier": "10.1.8",
|
|
84
|
+
"eslint-plugin-playwright": "^1.6.2",
|
|
85
|
+
"husky": "^9.0.11",
|
|
86
|
+
"jest": "30.3.0",
|
|
87
|
+
"jest-environment-jsdom": "30.0.5",
|
|
88
|
+
"jest-environment-node": "~30.3.0",
|
|
89
|
+
"jest-preset-angular": "17.0.0",
|
|
90
|
+
"jest-util": "30.0.5",
|
|
91
|
+
"jsdom": "^27.4.0",
|
|
92
|
+
"json-schema-to-typescript": "^14.1.0",
|
|
93
|
+
"json-source-map": "^0.6.1",
|
|
94
|
+
"jsonc-eslint-parser": "^2.1.0",
|
|
95
|
+
"lint-staged": "^15.2.2",
|
|
96
|
+
"nx": "23.1.0",
|
|
97
|
+
"prettier": "~3.6.2",
|
|
98
|
+
"sharp": "^0.34.5",
|
|
99
|
+
"ts-jest": "^29.1.0",
|
|
100
|
+
"ts-node": "10.9.1",
|
|
101
|
+
"typescript": "~6.0.0",
|
|
102
|
+
"typescript-eslint": "^8.65.0",
|
|
103
|
+
"vite": "^8.2.2",
|
|
104
|
+
"vitest": "^4.1.11",
|
|
105
|
+
"zone.js": "^0.16.3"
|
|
106
|
+
},
|
|
107
|
+
"lint-staged": {
|
|
108
|
+
"*.{js,ts,html,scss,json,md,yaml,yml}": [
|
|
109
|
+
"npx prettier --write"
|
|
110
|
+
],
|
|
111
|
+
"*.{js,ts}": [
|
|
112
|
+
"npx eslint --fix"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
}
|